对于此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