2014-12-03 2 views
0

у меня есть столбец XML с простой XML какВыбор атрибутов как строки из XML DataColumn

<Data att1="test1" att123="test123" /> 

они нужны мне в такой форме, как это:

IdRow attributeName attributeValue 
1  att1   test1 
1  att123  test123 

Попробованная с обоих узлов и запросов функций, но он работает с элементами, но не с атрибутами ... это можно сделать без преобразования атрибутов в элементы?

EDIT: Я могу получить значения атрибутов, но как я могу получить имена атрибутов для каждой строки?

EDIT2: решил, что для этого есть функция local-name.

SELECT T.id, T2.Att.value('local-name(.)', 'varchar(50)'), T2.Att.value('.', 'nvarchar(max)') 
FROM T 
CROSS APPLY DataXml.nodes('/Data/@*') as T2(Att) 
where T.id = 354 

ответ

0

Вы можете написать как:

DECLARE @xml as xml 
DECLARE @path as varchar(max) 
DECLARE @index int, @count int 

SET @xml = 
'<Data att1="test1" att123="test123" />' 



SELECT @index = 1 

SET @count = @xml.query('count(/Data/@*)').value('.','int') 

WHILE @index <= @count 
BEGIN 
    SELECT @xml.value('local-name((/Data/@*[sql:variable("@index")])[1])', 
      'varchar(max)') 
    SET @index = @index + 1 
END 
0

Он встречается, чтобы быть так просто:

SELECT T.id, T2.Att.value('local-name(.)', 'varchar(50)'), T2.Att.value('.', 'nvarchar(max)') 
    FROM T 
    CROSS APPLY DataXml.nodes('/Data/@*') as T2(Att) 
    where T.id = 354 
Смежные вопросы