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;
我正在尝试弄清楚如何在元素名称更改时获取 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;