2011-10-07 66 views
1

我似乎無法使用SQL Server 2005 XQuery從XML文檔中獲取[逗號]分隔字符串。從SQL Server 2005獲取一個帶有分隔符的字符串XQuery

我:

<AAA> 
    <Name>Name_A</Name> 
    <Value>Val_A</Value> 
</AAA> 
<AAA> 
    <Name>Name_B</Name> 
    <Value>Val_B</Value> 
</AAA> 
<AAA> 
    <Name>Name_C</Name> 
    <Value>Val_C</Value> 
</AAA> 
... (etc.) 

...並想獲得Val_A,Val_B,Val_C... - 一個逗號分隔字符串。

我可以轉換成表格,然後返回FOR XML字符串,但認爲有一個直接的方法。

謝謝。

回答

1

這個怎麼樣 - 這將在一個XML變量的任何數量的<AAA>節點的工作:

DECLARE @Input XML = '<AAA> 
    <Name>Name_A</Name> 
    <Value>Val_A</Value> 
</AAA> 
<AAA> 
    <Name>Name_B</Name> 
    <Value>Val_B</Value> 
</AAA> 
<AAA> 
    <Name>Name_C</Name> 
    <Value>Val_C</Value> 
</AAA>' 

SELECT 
    STUFF(
    (SELECT 
     ',' + AAA.value('(Value)[1]', 'varchar(20)') 
    FROM 
     @Input.nodes('/AAA') AS Node(AAA) 
    FOR XML PATH('') 
    ), 1, 1, '') 

輸出是:

Val_A,Val_B,Val_C 
+0

啊,我不知道向XML添加一個字符串(「,」)將工作,並使用CTE具有相同的.nodes ()查詢,然後分別執行FOR XML PATH! 非常好,謝謝。 – user984528

0
declare @xml xml = ' 
<AAA> 
    <Name>Name_A</Name> 
    <Value>Val_A</Value> 
</AAA> 
<AAA> 
    <Name>Name_B</Name> 
    <Value>Val_B</Value> 
</AAA> 
<AAA> 
    <Name>Name_C</Name> 
    <Value>Val_C</Value> 
</AAA> 
' 

select @xml.value('(/AAA[1]/Value)[1]', 'varchar(10)')+','+ 
     @xml.value('(/AAA[2]/Value)[1]', 'varchar(10)')+','+ 
     @xml.value('(/AAA[3]/Value)[1]', 'varchar(10)') 
0

如何

string-join(/AAA/Value, ",") 

(你可能會編輯,以適應路徑表達式的開始,取決於你如何閱讀你的輸入)

相關問題