2010-08-04 19 views
5

Tôi có hai bảng riêng biệt TV và Bộ nhận mà tôi đang sử dụng lệnh FOR XML PATH để xây dựng XML. Vấn đề của tôi là tôi muốn kết hợp đầu ra của TV XML của tôi Xây dựng với Trình xây dựng XML nhận của tôi để tạo ra một đầu ra XML.Kết hợp XML từ T-SQL

Vì vậy, tôi sẽ có một cái gì đó như thế này (cho phép tôi để giữ cho TV và Thiết Bị Thu Thẻ Tách trong FilterData Root):

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

Vấn đề là khi tôi xây dựng các truy vấn của tôi để đầu ra XML này

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

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

tôi không chắc chắn làm thế nào để kết hợp chúng để trông giống như thứ e dụ:

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

Trả lời

5

Sử dụng:

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

Tested sử dụng:

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');  
Các vấn đề liên quan