2014-12-03 61 views
0

我有一個簡單的XML XML列像選擇屬性從XML的DataColumn行

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

我需要他們在這樣的形式:

IdRow attributeName attributeValue 
1  att1   test1 
1  att123  test123 

與兩個節點和查詢功能,但試了它適用於元素,但不適用於屬性......這可以在不將屬性轉換爲元素的情況下完成。

編輯:我可以得到屬性的值,但我怎樣才能得到每行的屬性名稱?

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

它occures是如此簡單:

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