volver primarias y secundarias de datos utilizando para XML en un procedimiento almacenado

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

Pregunta

Si tengo una tabla principal y una tabla secundaria donde puede haber uno de los padres de muchos niños, ¿cómo puedo ir sobre la devolución de la siguiente XML de un procedimiento almacenado en un procedimiento almacenado?

<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>
¿Fue útil?

Solución

Esto es definitivamente mucho más difícil con SQL 2000. A continuación se muestra un ejemplo de consulta que pueden ayudarle a empezar con este proceso. Por favor entienda que no es exactamente en el formato que busca. El propósito de la consulta es para ayudarle a empezar ... un empujón en la dirección correcta.

El truco aquí es el uso FOR XML EXPLICIT, y con cuidado la elaboración de sus alias de columna para controlar el posicionamiento de los elementos.

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

Otros consejos

Puede hacerlo utilizando algunas selecciona anidación.

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

Vaya, no lo hice vi que era para SQL-Server-2000.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top