2017-08-30 97 views
1

我有兩列這樣的表(DataXML是XML數據類型):結合XML多行數據到一個XML值(SQL Server)的

RowID DataXML 
––––– ––––––––––––––––––––––––––– 
1  <ELEM FOO="11" BAR="A" /> 
2  <ELEM FOO="22" BAR="B" /> 
3  <ELEM FOO="33" BAR="C" /> 
4  <ELEM FOO="44" BAR="D" /> 

我想編寫一個T-SQL聲明是這樣的:

declare @MyXML xml; 
set @MyXML = (
    SELECT DataXML 
    FROM MyTable 
    WHERE RowID BETWEEN 2 AND 3 
    FOR  XML ?????? 
); 

和@MyXML本文檔結束:

<ROOT> 
    <ELEM FOO="22" BAR="B" /> 
    <ELEM FOO="33" BAR="C" /> 
</ROOT> 

我怎樣寫我的查詢聲明以獲得我想要的結果?

謝謝你閱讀我的問題。

回答

2

子選擇不列別名不會有他們的結果包裹在一個XML元素:

declare @data table (
    [RowID] int not null 
    , [DataXML] xml not null 
); 

insert into @data ([RowID], [DataXML]) 
values (1, N'<ELEM FOO="11" BAR="A" />') 
    , (2, N'<ELEM FOO="22" BAR="B" />') 
    , (3, N'<ELEM FOO="33" BAR="C" />') 
    , (4, N'<ELEM FOO="44" BAR="D" />'); 

select (
      select (select a.[DataXML]) 
      from @data as a 
      where a.RowID between 2 and 3 
      for xml path(''), type 
     ) 
for xml path('ROOT'), type; 

返回:

<ROOT> 
    <ELEM FOO="22" BAR="B" /> 
    <ELEM FOO="33" BAR="C" /> 
</ROOT> 
+0

要命!完善。謝謝。 – JediSQL