2010-12-07 71 views
5

我有一個存儲在xml列中的數據,需要逗號分隔的子節點列表。使用下面的腳本,我只能得到「A B C」。請幫助我使用xquery獲得「A,B,C」(使用逗號簡單地替換空格不會幫助,因爲我們的數據中包含空格)。從SQL Server列中獲取XML節點作爲逗號分隔列表

create table Temp12345 (col1 xml) 
go 

insert into Temp12345 (col1) 
values('<fd><field i="22"><v>A</v><v>B</v><v>C</v></field></fd>') 
go 

select col1.value('(/fd/field[@i=22])[1] ', 'NVarchar(Max)') 
from Temp12345 
go 

drop table Temp12345 
go 

回答

8

試試這個:

SELECT 
    STUFF((SELECT 
       ',' + fd.v.value('(.)[1]', 'varchar(10)') 
      FROM 
       Temp12345 
      CROSS APPLY 
       col1.nodes('/fd/field/v') AS fd(v) 
      FOR XML PATH('') 
     ), 1, 1, '') 

這給了我A,B,C - 它爲你工作,太?

+0

+1的工作答案。出於好奇,我看到你正在使用CROSS APPLY。我和CTE做了類似的事情。這兩種方法是否有重大優勢? – IamIC 2010-12-07 16:50:38

+0

@IanC:不知道 - 必須看到你的CTE :-)這就是我知道的,我可以將XML節點列表「碎片化」成行的「僞表」,以從中獲取單個零碎片段。 – 2010-12-07 16:52:00

0

在一個充滿抱怨的XQuery處理器,你可以只使用:

(/fd/field[@i=22])[1]/string-join(*,',')