إرجاع بيانات الوالدين والطفل باستخدام XML في بروك المخزنة
-
23-09-2019 - |
سؤال
إذا كان لديّ طاولة أولية وطاولة طفل حيث يمكن أن يكون هناك أحد الوالدين للعديد من الأطفال ، فكيف يمكنني إعادة إرجاع 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 صريح ، وصياغة الأسماء المستعارة بعناية للعمود للتحكم في وضع العناصر.
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')
OPPS ، لم أر أنه كان من أجل SQL-Server-2000.
لا تنتمي إلى StackOverflow