Frage

Wenn ich eine übergeordnete Tabelle und ein Kind Tisch, wo es ein Elternteil zu vielen Kinder sein kann, wie kann ich das folgende XML aus einer gespeicherten Prozedur in einer gespeicherten Prozedur gehe über die Rückkehr?

<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>
War es hilfreich?

Lösung

Dies ist auf jeden Fall sehr viel schwieriger mit SQL 2000. Nachfolgend finden Sie eine Beispielabfrage, die Sie mit diesem Prozess beginnen kann helfen. Bitte haben Sie Verständnis, dass es nicht genau in dem Format, das Sie suchen. Der Zweck der Abfrage ist, dass Sie den ersten Schritten zu helfen ... einen Schubs in die richtige Richtung.

Der Trick hier ist die Verwendung FOR XML EXPLICIT und sorgfältig Ihre Spalte Aliase Crafting die Positionierung der Elemente zu steuern.

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

Andere Tipps

Sie können es einige Verschachtelung wählt werden.

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')

Oops, ich habe nicht gesehen, dass es für SQL-Server-2000 war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top