连接SQL XML字段中的值
我在SQL Server 2012中有一个表,其中有一个XML字段。该字段包含数组。以下格式的元素数不是常量:连接SQL XML字段中的值,sql,xml,Sql,Xml,我在SQL Server 2012中有一个表,其中有一个XML字段。该字段包含数组。以下格式的元素数不是常量: <values> <value>A</value> <value>B</value> <value>C</value> <value>D</value> </values> 我试过: SELECT myField.value('.',
<values>
<value>A</value>
<value>B</value>
<value>C</value>
<value>D</value>
</values>
我试过:
SELECT myField.value('.', 'NVARCHAR(50)')
FROM myTable
这会创建“ABCD”,但我不知道如何在实际情况下对其进行分隔,因为它们不是单字符值。我想到了一种方法来实现这一点
SELECT REPLACE(
REPLACE(
REPLACE(
CAST([myField] As NVARCHAR(MAX)),
'<values><value>',
''),
'</value></values>',
''),
'</value><value>',
';'
) As [Hacked]
FROM [myTable]
…但这让我觉得有点脏。一定有更好的办法。试试这个
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
谢谢,我希望能有更简单的东西,但我开始觉得这是不可能的。
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