1

我在 SQL Server 2000 中显式使用 for xml 时遇到问题(所以我不能使用 sql 2005/8 中的新 path() 东西)

基本上我有两个表,我想要的 XML 结构是

<xml>
  <table_1 field1="foo" field2="foobar2" field3="foobar3">
      <a_row_from_table_2 field1="goo" field2="goobar2" field3="goobar3" />
      <a_row_from_table_2 field1="hoo" field2="hoobar2" field3="hoobar3" />
  </table_1>
</xml>

也就是table_1和table_2是一对多的关系,我想做一个层次结构。

到目前为止,我似乎无法得到它,我设法得到的最接近的是 table1 中的所有记录,table2 中的所有记录都附加到 table1 的最后一个元素

对于建立这种关系的任何帮助将不胜感激。

-马尔辛

4

1 回答 1

0

您的查询是否包含order by子句?在for xml explicit模式中,信息以所需的顺序出现是很重要的。例如,在 Northwind 示例数据库中,您可以为员工区域生成嵌套 XML,例如:

select
    1 as Tag,
    Null as Parent,
    e.EmployeeId as [Employee!1!EmployeeId],
    e.LastName as [Employee!1!LastName],
    Null as [EmployeeTerritories!2!TerritoryID]
from dbo.Employees e
union all
select 2 as Tag,
    1 as Parent,
    et.EmployeeId as [Employee!1!EmployeeId],
    Null as [Employee!1!LastName],
    et.TerritoryId as [EmployeeTerritories!2!TerritoryID]
from dbo.EmployeeTerritories et
order by [Employee!1!EmployeeId], Parent
for xml explicit

这会产生如下 XML:

<Employee EmployeeId="1" LastName="Davolio">
  <EmployeeTerritories TerritoryID="06897" />
  <EmployeeTerritories TerritoryID="19713" />
</Employee>
<Employee EmployeeId="2" LastName="Fuller">
...

要了解它是如何工作的,请运行不带for xml explicit.

于 2010-03-02T09:31:26.357 回答