Получить строку с разделителями из XML с помощью SQL Server 2005 XQuery - PullRequest
1 голос
/ 08 октября 2011

Кажется, я не могу получить строку с разделителями-запятыми из документа XML, используя только SQL Server 2005 XQuery.

У меня есть:

<AAA>
  <Name>Name_A</Name>
  <Value>Val_A</Value>
</AAA>
<AAA>
  <Name>Name_B</Name>
  <Value>Val_B</Value>
</AAA>
<AAA>
  <Name>Name_C</Name>
  <Value>Val_C</Value>
</AAA>
... (etc.)

... и хотел бы получить Val_A,Val_B,Val_C... - строку через запятую.

Я могу преобразовать в таблицу, а затем вернуться в строку с FOR XML, но подумал, что есть прямой путь.

Спасибо.

Ответы [ 3 ]

1 голос
/ 08 октября 2011

Как насчет этого - это будет работать для любого количества <AAA> узлов в переменной XML:

DECLARE @Input XML = '<AAA>
  <Name>Name_A</Name>
  <Value>Val_A</Value>
</AAA>
<AAA>
  <Name>Name_B</Name>
  <Value>Val_B</Value>
</AAA>
<AAA>
  <Name>Name_C</Name>
  <Value>Val_C</Value>
</AAA>'

SELECT
    STUFF(
    (SELECT 
        ',' + AAA.value('(Value)[1]', 'varchar(20)')
     FROM
        @Input.nodes('/AAA') AS Node(AAA)
     FOR XML PATH('')
    ), 1, 1, '')

Вывод:

Val_A,Val_B,Val_C
0 голосов
/ 08 октября 2011

Как насчет

string-join(/AAA/Value, ",")

(Вам может понадобиться адаптировать начало выражения Path в зависимости от того, как вы читаете ввод)

0 голосов
/ 08 октября 2011
declare @xml xml = '
<AAA>
  <Name>Name_A</Name>
  <Value>Val_A</Value>
</AAA>
<AAA>
  <Name>Name_B</Name>
  <Value>Val_B</Value>
</AAA>
<AAA>
  <Name>Name_C</Name>
  <Value>Val_C</Value>
</AAA>
'

select @xml.value('(/AAA[1]/Value)[1]', 'varchar(10)')+','+
       @xml.value('(/AAA[2]/Value)[1]', 'varchar(10)')+','+
       @xml.value('(/AAA[3]/Value)[1]', 'varchar(10)')
...