【问题标题】:SQL Server FOR XML PATH ROOT element with attribute (Path Mode symbol @ or / )具有属性的 SQL Server FOR XML PATH ROOT 元素(路径模式符号 @ 或 / )
【发布时间】:2018-01-25 04:43:15
【问题描述】:

我需要这样的输出

<Employee EmpID="4">
  <FirstName>Rob</FirstName>
  <LastName>Walters</LastName>
</Employee>
<Employee EmpID="168">
  <FirstName>Rob</FirstName>
  <MiddleName>T</MiddleName>
  <LastName>Caron</LastName>
</Employee>

但是执行此操作的 SQL:

SELECT e.EmployeeID AS "@EmpID",
   c.FirstName, 
   c.MiddleName, c.LastName
FROM Employee AS e 
INNER JOIN Contact AS c 
ON c.ContactID = e.ContactID
WHERE c.FirstName = 'Ross'
FOR XML PATH (''), ROOT ('Employees'); 

返回此错误:

SQL Server Database Error: Row tag omission (empty row tag name) cannot be used with attribute-centric FOR XML serialization.

查看 SQLFiddle:

SQLFiddle

【问题讨论】:

  • SELECT (SELECT e.EmployeeID AS "@EmpID" FOR XML PATH ('EmployeeID'), TYPE), c.FirstName, c.MiddleName, c.LastName ... FOR XML PATH ('Employee'), ROOT ('Employees'); 可能是您所追求的。
  • 嘿@ZLK 谢谢,但不是这样...您的代码的结果是:&lt;Employee&gt;&lt;Employee EmpID="256"/&gt;&lt;FirstName&gt;Ross&lt;/FirstName&gt;&lt;MiddleName&gt;&lt;/MiddleName&gt;&lt;LastName&gt;Geller&lt;/LastName&gt;&lt;/Employee&gt; SQLFiddle 但我需要&lt;Employee EmpID="256"&gt;&lt;FirstName&gt;Ross&lt;/FirstName&gt;&lt;MiddleName&gt;&lt;/MiddleName&gt;&lt;LastName&gt;Geller&lt;/LastName&gt;&lt;/Employee&gt;
  • 呃,那么您只需将当前查询中的for xml path ('') 更改为for xml path ('Employee')
  • @ZLK 这很好用,谢谢....SQLFiddle

标签: sql-server xml for-xml-path for-xml


【解决方案1】:

最好的方法是使用正确的代码:

SELECT 
e.EmployeeID AS "@EmpID",
c.FirstName, 
c.MiddleName, c.LastName
FROM Employee AS e 
INNER JOIN Contact AS c 
ON c.ContactID = e.ContactID
WHERE c.FirstName = 'Ross'
FOR XML PATH ('Employee')
;

喜欢正确的 SQLFiddle:http://www.sqlfiddle.com/#!6/3a159/8/0

【讨论】:

    猜你喜欢
    • 2017-09-22
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多