Sql server 如何获取XML节点中的XML属性列表

Sql server 如何获取XML节点中的XML属性列表,sql-server,xml,Sql Server,Xml,我有一个场景,在这个场景中,我在sql表中获得的XML数据可以具有与特定元素相关的动态属性列表。例如,XML可以是 <XML><row ID = 1 x1="x1value" x2 = "x2value" /></XML> <XML><row ID = 10 X3 = "x3value" x10 = "x10value" /></XML> <XML><row ID = 5 x1="x1value2" x10

我有一个场景,在这个场景中,我在sql表中获得的XML数据可以具有与特定元素相关的动态属性列表。例如,XML可以是

<XML><row ID = 1 x1="x1value" x2 = "x2value" /></XML>
<XML><row ID = 10 X3 = "x3value" x10 = "x10value" /></XML>
<XML><row ID = 5 x1="x1value2" x10 = "x10value2" /></XML>
我所研究的所有示例都显示了如果您知道XML中存在的属性,那么提取的方法。在我的示例中,我不知道元素中存在哪些属性

任何帮助都将不胜感激:)

试试这个

DECLARE @XML as xml

SET @XML = '<XML><row ID="1" x1="x1value" x2="x2value" /></XML>'

SELECT 
    k.value('@ID','BIGINT') AS ID,
    b.value('local-name(.)','VARCHAR(50)') AS ColumnName,  -- get attribute name
    b.value('.','VARCHAR(MAX)') AS Value  -- get attribute value
FROM @XML.nodes('/XML/row') p(k)
CROSS APPLY k.nodes('@*') a(b)

希望这有帮助

非常感谢您的查询!!
DECLARE @XML as xml

SET @XML = '<XML><row ID="1" x1="x1value" x2="x2value" /></XML>'

SELECT 
    k.value('@ID','BIGINT') AS ID,
    b.value('local-name(.)','VARCHAR(50)') AS ColumnName,  -- get attribute name
    b.value('.','VARCHAR(MAX)') AS Value  -- get attribute value
FROM @XML.nodes('/XML/row') p(k)
CROSS APPLY k.nodes('@*') a(b)
ID  ColumnName   Value    
--- ------------ -----------
1   ID           1
1   x1           x1value
1   x2           x2value