"select 1 as tag,null as parent, RTRIM(sid) as [cardNumber!1!sid],RTRIM(sname) as [name!1!sname] from Table1 where stime in(select max(stime) from Table1 group by sid) for XML EXPLICIT "
是从sqlserver的读取sid,sname,然后以xml的形式输出,但是运行,老是提示错误 原来声明为'cardNumber'的xml标记ID1现在要重新声明为'name'
是从sqlserver的读取sid,sname,然后以xml的形式输出,但是运行,老是提示错误 原来声明为'cardNumber'的xml标记ID1现在要重新声明为'name'
<Employee EmpID="1" >
<Name FName="Guy" LName="Gilbert" />
</Employee>
...
因为层次结构中有两个级别,所以应编写两个 SELECT 查询并应用 UNION ALL。下面是检索 <Employee> 元素及其属性的值的第一个查询。该查询为 <Employee> 元素的 Tag 值赋予 1,为 Parent 赋予 NULL,因为它是一个顶级元素。 复制代码
SELECT 1 as Tag,
NULL as Parent,
EmployeeID as [Employee!1!EmpID],
NULL as [Name!2!FName],
NULL as [Name!2!LName]
FROM HumanResources.Employee E, Person.Contact C
WHERE E.ContactID = C.ContactID
下面是第二个查询。它检索 <Name> 元素的值。它为 <Name> 元素的 Tag 值赋予 2,为 Parent 标记值赋予 1,从而将 <Employee> 标识为父元素。 复制代码
SELECT 2 as Tag,
1 as Parent,
EmployeeID,
FirstName,
LastName
FROM HumanResources.Employee E, Person.Contact C
WHERE E.ContactID = C.ContactID
可以使用 UNION ALL 组合这些查询,应用 FOR XML EXPLICIT,并指定所需的 ORDER BY 子句。必须首先按 EmployeeID 然后按姓名对行集进行排序,以便首先显示姓名中的 NULL 值。通过执行以下不带 FOR XML 子句的查询,可以看到会生成通用表。 下面是最终查询: 复制代码
SELECT 1 as Tag,
NULL as Parent,
EmployeeID as [Employee!1!EmpID],
NULL as [Name!2!FName],
NULL as [Name!2!LName]
FROM HumanResources.Employee E, Person.Contact C
WHERE E.ContactID = C.ContactID
UNION ALL
SELECT 2 as Tag,
1 as Parent,
EmployeeID,
FirstName,
LastName
FROM HumanResources.Employee E, Person.Contact C
WHERE E.ContactID = C.ContactID
ORDER BY [Employee!1!EmpID],[Name!2!FName]
FOR XML EXPLICIT
就可以了。