将 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 所有由空格分隔的值,您可以在字符串级别进行替换。