ストアドプロシージャにFOR XMLを使用して、親と子のデータを返します
-
23-09-2019 - |
質問
私は多くの子供たちへの1人の親があることができ、親テーブルと子テーブルを持っている場合は、どのように私は?ストアドプロシージャにストアドプロシージャから次の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です。それはあなたが探しているフォーマットで正確ではありませんので、ご了承ください。クエリの目的は、右方向に...あなたが始めるナッジを支援することです。
ここでのトリックは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
他のヒント
あなたは、いくつかの入れ子に選択を使用してそれを行うことができます。
select 'a' as "ID",
(
select child as "ID"
from ( select 'integer' as child
union all
select 'string' ) a
for xml path('Child'), type, root('Childrens')
) as "*"
for xml path('Parent'), type, root('Parents')
おっと、私はそれがSQL-Serverの-2000のためだったことを見ませんでした。
所属していません StackOverflow