gpt4 book ai didi

sql-server - 在存储过程中使用 FOR XML 返回父和子数据

转载 作者:行者123 更新时间:2023-12-04 06:57:45 24 4
gpt4 key购买 nike

如果我有一个父表和一个子表,其中可以有一个父级到多个子级,我该如何从存储过程中的存储过程返回以下 xml?

<Parents>
<Parent>
<ID>Integer</ID>
<Children>
<Child>
<ID>Integer</ID>
<Text>String</Text>
</Child>
<Child>
<ID>Integer</ID>
<Text>String</Text>
</Child>
</Children>
</Parent>
<Parent>
<ID>Integer</ID>
<Children>
<Child>
<ID>Integer</ID>
<Text>String</Text>
</Child>
<Child>
<ID>Integer</ID>
<Text>String</Text>
</Child>
</Children>
</Parent>
</Parents>

最佳答案

这对于 SQL 2000 来说肯定要困难得多。下面是一个示例查询,可以帮助您开始这个过程。请理解,它与您正在寻找的格式不完全相同。查询的目的是帮助您入门……朝着正确的方向插入。

这里的技巧是使用 FOR XML EXPLICIT,并精心制作列别名来控制元素的定位。

Declare @Parent Table(Id Int, Data VarChar(20))
Insert Into @Parent Values(1, 'Fruit')
Insert Into @Parent Values(2, 'Vegetable')

Declare @Child Table(Id Int, ParentId Int, Name VarChar(20))
Insert Into @Child Values(1, 1, 'Apple')
Insert Into @Child Values(2, 1, 'Banana')
Insert Into @Child Values(3, 2, 'Carrot')
Insert Into @Child Values(4, 2, 'Pea')

Select 1 As Tag,
NULL As Parent,
Id As [Parent!1!Id!Element],
Data As [Parent!1!Data!Element],
NULL As [Child!2!Id!Element],
NULL As [Child!2!Name!Element]
From @Parent P

Union

Select 2 As Tag,
1 As Parent,
P.Id,
NULL,
C.Id,
Name
From @Child C
Inner Join @Parent P
On C.ParentId = P.Id
Order By [Parent!1!Id!Element]
For XML Explicit

关于sql-server - 在存储过程中使用 FOR XML 返回父和子数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2343192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com