"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'

解决方案 »

  1.   

    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 auto
      

  2.   

    如果用anto而不用EXPLICIT的话,sid和sname就写在同一行里了。本来用for xml EXPLICIT,就是为了输出多层次的数据。
      

  3.   

    此示例检索每个雇员的雇员 ID 和雇员姓名。在 AdventureWorks 数据库中,可从 Employee 表中获得 EmployeeID。可从 Contact 表中获得雇员姓名。可使用 ContactID 列来联接表。 假定要让 FOR XML EXPLICIT 转换生成 XML,如下所示: 复制代码 
    <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
     
      

  4.   

    问题解决了,因为是vb里用的,所以没写那么复杂,改成    "select 1 as tag,null as parent, RTRIM(sid) as [data!1!sid!element],RTRIM(sname) as [data!1!sname] from Table1 where stime in(select max(stime) from Table1 group by sid) for XML EXPLICIT " 
    就可以了。