преобразование нескольких узлов в xml в разделенный запятыми список в Tsql - PullRequest
0 голосов
/ 16 мая 2018

У меня есть таблица со столбцом, содержащим следующий XML, который я хочу представить в графическом интерфейсе в виде списка, разделенного запятыми, т.е.1,2,5,6,7,8

    <RuleSetting>
  <CurrentQueue>1559</CurrentQueue>
  <CurrentQueue>1560</CurrentQueue>
  <CurrentQueue>1561</CurrentQueue>
  <CurrentQueue>1564</CurrentQueue>
</RuleSetting>

Как я могу это сделать или где я могу найти информацию о том, как это сделать?

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете использовать 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() вернет все значения, разделенные пробелом, которые можно заменить на строковом уровне.

...