在SQL XML字段中连接值

时间:2013-07-19 08:43:37

标签: sql xml

我在SQL Server 2012中有一个表,它有一个XML字段。该字段包含以下格式的数组(元素数不是常量):

<values>
    <value>A</value>
    <value>B</value>
    <value>C</value>
    <value>D</value>
</values>

我想把它变成像这样的varchar:

'A;B;C;D'

我试过了:

SELECT myField.value('.', 'NVARCHAR(50)')
FROM   myTable

创建'ABCD',但我不知道如何划分它(在实际情况下,它们不是单个字符值)。

2 个答案:

答案 0 :(得分:1)

试试这个

DECLARE @myTable TABLE (id int,myField XML)

INSERT INTO @myTable(id,myField) VALUES(1,'<values>
    <value>A</value>
    <value>B</value>
    <value>C</value>
    <value>D</value>
</values>')


;WITH xmltable
AS
(
    SELECT id, myField.v.value('.', 'varchar(200)') AS myField
    FROM @myTable 
    CROSS APPLY myField.nodes('/values/value') AS myField(v)
)

SELECT STUFF((SELECT ';' + myField 
                  FROM xmltable t2 
                  WHERE t2.id = t1.id  
                  FOR XML PATH('')),1,1,'') AS myField
FROM xmltable t1
GROUP BY id

答案 1 :(得分:0)

我想到了实现这个目标的黑客......

SELECT REPLACE(
           REPLACE(
               REPLACE(
                   CAST([myField] As NVARCHAR(MAX)), 
                   '<values><value>', 
                   ''), 
               '</value></values>', 
               ''), 
           '</value><value>', 
           ';'
       ) As [Hacked] 
FROM   [myTable]

......但它让我觉得有点脏。必须有更好的方法。