将 xml 中的多个节点转换为 Tsql 中的逗号分隔列表
convert mutilple nodes within xml to comma seperated list in Tsql
我有一个 table,其中有一列包含以下 xml,我想将其作为逗号分隔列表显示在 gui 上,即。 1,2,5,6,7,8
<RuleSetting>
<CurrentQueue>1559</CurrentQueue>
<CurrentQueue>1560</CurrentQueue>
<CurrentQueue>1561</CurrentQueue>
<CurrentQueue>1564</CurrentQueue>
</RuleSetting>
我该怎么做或在哪里可以找到有关如何操作的信息?
您可以为此使用 XQuery
:
DECLARE @xml XML=
N'<RuleSetting>
<CurrentQueue>1559</CurrentQueue>
<CurrentQueue>1560</CurrentQueue>
<CurrentQueue>1561</CurrentQueue>
<CurrentQueue>1564</CurrentQueue>
</RuleSetting>';
SELECT STUFF(@xml.query(N'
for $nd in /RuleSetting/CurrentQueue/text()
return
<x>{concat(",",$nd)}</x>
').value('.','nvarchar(max)'),1,1,'');
如果您可以确定您的数据永远不会包含任何空白,您可以使用这种简单的方法:
SELECT REPLACE(@xml.query(N'data(/RuleSetting/CurrentQueue)')
.value(N'.',N'nvarchar(max)'),' ',',');
提示:XQuery
函数 data()
将 return 所有由空格分隔的值,您可以在字符串级别进行替换。
我有一个 table,其中有一列包含以下 xml,我想将其作为逗号分隔列表显示在 gui 上,即。 1,2,5,6,7,8
<RuleSetting>
<CurrentQueue>1559</CurrentQueue>
<CurrentQueue>1560</CurrentQueue>
<CurrentQueue>1561</CurrentQueue>
<CurrentQueue>1564</CurrentQueue>
</RuleSetting>
我该怎么做或在哪里可以找到有关如何操作的信息?
您可以为此使用 XQuery
:
DECLARE @xml XML=
N'<RuleSetting>
<CurrentQueue>1559</CurrentQueue>
<CurrentQueue>1560</CurrentQueue>
<CurrentQueue>1561</CurrentQueue>
<CurrentQueue>1564</CurrentQueue>
</RuleSetting>';
SELECT STUFF(@xml.query(N'
for $nd in /RuleSetting/CurrentQueue/text()
return
<x>{concat(",",$nd)}</x>
').value('.','nvarchar(max)'),1,1,'');
如果您可以确定您的数据永远不会包含任何空白,您可以使用这种简单的方法:
SELECT REPLACE(@xml.query(N'data(/RuleSetting/CurrentQueue)')
.value(N'.',N'nvarchar(max)'),' ',',');
提示:XQuery
函数 data()
将 return 所有由空格分隔的值,您可以在字符串级别进行替换。