إرجاع بيانات الوالدين والطفل باستخدام XML في بروك المخزنة

StackOverflow https://stackoverflow.com/questions/2343192

سؤال

إذا كان لديّ طاولة أولية وطاولة طفل حيث يمكن أن يكون هناك أحد الوالدين للعديد من الأطفال ، فكيف يمكنني إعادة إرجاع 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top