.net – 从SQL XML列中的元素中获取属性的名称

对于此xml(在sql 2005 XML列中):
<doc>
 <a>1</a>
 <b ba="1" bb="2" bc="3" />
 <c bd="3"/>
<doc>

我希望能够检索属性(ba,bb,bc,bd)的名称,而不是sql Server 2005中的值.好吧,XPath肯定允许使用name(),但sql不支持.这是我在sql中使用XML的主要抱怨;你必须弄清楚XML / Xpath / XQuery规范的哪些部分.

我能想到的唯一方法是构建一个CLR proc,它将XML加载到XML Document(iirc)中并运行XPath来提取节点的名称.我愿意接受这方面的建议.

解决方法

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

SET @xml = 
'<doc>
 <a>1</a>
 <b ba="1" bb="2" bc="3" />
 <c bd="3"/>
</doc>'



SELECT @index = 1

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

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

对于元素’b’

它返回

> ba
> bb
> bc

您可以构建一个循环来获取xml中每个元素的属性.

BTW应在关闭doc标签关闭样本中的XML.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...