目前我们有一个非规范化的数据库。 即
Name|NameID|EmployeeID|EmployeeType
我正在规范数据库以解析Employee表中的EmployeeID而不是名称表。
所以我们现在有一个选择
SELECT Name, NameID, EmployeeID, EmployeeType FROM Name
FOR XML AUTO
将输出:
<Name Name='Fred' NameID='1' EmployeeID='1' EmployeeType='Manager'>
现在我有一个INNER JOIN
SELECT Name, NameID, Name.EmployeeID, Employee.EmployeeType FROM Name
INNER JOIN Employee ON Name.EmployeeID = Employee.EmployeeID
FOR XML AUTO
现在我的XML看起来像这样:
<Name Name='Fred' NameID='1' EmployeeID='1'>
<Employee EmployeeType='Manager' />
</Name>
我的问题是,有没有办法让XML AUTO像以前一样输出我的XML,还是我必须转移到XML Explicit?
答案 0 :(得分:1)
您可以使用FOR XML PATH
吗?它使您可以更好地控制XML的布局,并且它比XML EXPLICIT 更容易! : - )
SELECT
Name as '@Name',
NameID as '@NameID',
Name.EmployeeID as '@EmployeeID',
Employee.EmployeeType as '@EmployeeType'
FROM Name
INNER JOIN Employee ON Name.EmployeeID = Employee.EmployeeID
FOR XML PATH('Name')
PATH('Name')
定义整个元素应该是<Name>
元素,如果你使用带有@的列的别名,那么你将获得属性(没有前导“@”,你得到子元素。)
查看What's new in SQL Server 2005 XML上的MSDN文章,了解更多详细信息和示例。
马克