2010-08-04 16 views
5

Tengo dos mesas separadas de televisores y receptores de las que estoy usando los comandos FOR XML PATH para crear XML fuera de. Mi problema es que quiero combinar el resultado de mi TV XML Build con mi Receiver XML Build para crear una salida XML.Combinar XML de T-SQL

por lo que tendría algo como esto (que me permite mantener los televisores y receptores de separar las etiquetas dentro de la raíz FilterData):

<FilterData> 
<TVs> 
    <TV> 
     <Type>LCD</Type> 
     <Brand>Samsung</Brand> 
    </TV> 
    <TV> 
     <Type>LCD</Type> 
     <Brand>Panasonic</Brand> 
    </TV> 
</TVs> 
<Receivers> 
    <Receiver> 
     <Type>Surround 7.1</Type> 
     <Brand>Onkyo</Brand> 
    </Receiver> 
    <Receiver> 
     <Type>Surround 7.1</Type> 
     <Brand>Denon</Brand> 
    </Receiver> 
</Receivers> 
</FilterData> 

El problema es que cuando construyo mis consultas a la salida de este XML

Select 
Type 
,Brand 
From dbo.TVs 
FOR XML PATH('TV'),ROOT('TVS') TYPE 

Y

Select 
Type 
,Brand 
From dbo.Receivers 
FOR XML PATH('Receiver'),ROOT('Receivers') TYPE 

no estoy seguro de cómo combinar estos para parecerse º e ejemplo:

<FilterData> 
<TVs> 
    <TV> 
     <Type>LCD</Type> 
     <Brand>Samsung</Brand> 
    </TV> 
    <TV> 
     <Type>LCD</Type> 
     <Brand>Panasonic</Brand> 
    </TV> 
</TVs> 
<Receivers> 
    <Receiver> 
     <Type>Surround 7.1</Type> 
     <Brand>Onkyo</Brand> 
    </Receiver> 
    <Receiver> 
     <Type>Surround 7.1</Type> 
     <Brand>Denon</Brand> 
    </Receiver> 
</Receivers> 

Respuesta

5

Uso:

SELECT (SELECT t.type, t.brand 
      FROM dbo.TVs t 
     FOR XML PATH('tv'), ROOT('tvs'), ELEMENTS, TYPE), 
     (SELECT r.type, r.brand 
      FROM dbo.Receivers r 
     FOR XML PATH('receiver'), ROOT('receivers'), ELEMENTS, TYPE) 
FOR XML PATH('filterdata') 

probada usando:

WITH tvs AS (
    SELECT 'LCD' AS type, 'Samsung' AS brand 
    UNION ALL 
    SELECT 'LCD' AS type, 'Panasonic' AS brand), 
    receivers AS (
    SELECT 'Surround 7.1' AS type, 'Onkyo' AS brand 
    UNION ALL 
    SELECT 'Surround 7.1', 'Denon') 
SELECT (SELECT t.type, t.brand 
      FROM tvs t 
     FOR XML PATH('tv'), ROOT('tvs'), ELEMENTS, TYPE), 
     (SELECT r.type, r.brand 
      FROM receivers r 
     FOR XML PATH('receiver'), ROOT('receivers'), ELEMENTS, TYPE) 
FOR XML PATH('filterdata') 
2
DECLARE @tvs TABLE 
(
     [Type] varchar(20) not null 
    , [Brand] varchar(50) not null 
) 

DECLARE @receivers TABLE 
(
     [Type] varchar(20) not null 
    , [Brand] varchar(50) not null 
) 

INSERT INTO @tvs([Type], [Brand]) Values('LCD', 'Samsung'), ('LCD', 'Panasonic'); 
INSERT INTO @receivers([Type], [Brand]) Values('Surround 7.1', 'Onkyo'), ('Surround 7.1', 'Dennon'); 



SELECT 
    (
     SELECT 
       [Type] 
      , [Brand] 
     FROM 
      @tvs 
     FOR XML PATH('TV'),ROOT('TVS'), TYPE 
    ) 
    , 
    (
     SELECT 
       [Type] 
      , [Brand] 
     FROM 
      @receivers 
     FOR XML PATH('Receiver'),ROOT('Receivers'), TYPE 
    ) 
FOR XML PATH('FilterData');