XML AUTO是否支持我要做的事情?

时间:2009-11-02 12:10:01

标签: sql sql-server sql-server-2005 sql-server-2008

目前我们有一个非规范化的数据库。 即

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?

1 个答案:

答案 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文章,了解更多详细信息和示例。

马克