SQL XML 属性值

SQL XML Attribute value

我正在尝试弄清楚如何在元素名称更改时获取 XML 属性值。无论元素如何,属性都相同。

<obj1 id="1" name="sally" />
<obj2 id="15" date="yesterday" />

我一直在尝试各种形式,但没有用:

SELECT 
   [OriginalRecordXml].value('(/./id)[1]', 'varchar(MAX)')
FROM [AuditRecords]

这可能吗?

像这样的东西就可以了:

declare @t table (
    Id int identity(1,1) primary key,
    XMLData xml not null
);

insert into @t (XMLData)
values (N'<obj1 id="1" name="sally" />
<obj2 id="15" date="yesterday" />'),
(N'<objM />');

select t.Id, x.c.value('./@id', 'varchar(max)')
from @t t
    cross apply t.XMLData.nodes('//*[@id]') x(c);

或者,如果您只需要第一个/单个节点的值,您可以节省一点:

select t.Id, t.XMLData.value('/*[@id][1]/@id', 'varchar(max)')
from @t t;