如何在SQLServer2005中选择xml列的顶级属性?
我在SQL Server 2005中有一个xml列,相当于:如何在SQLServer2005中选择xml列的顶级属性?,sql,sql-server,xml,xpath,Sql,Sql Server,Xml,Xpath,我在SQL Server 2005中有一个xml列,相当于: <Test foo="bar"> <Otherstuff baz="belch" /> </Test> 我希望能够以varchar的形式获取Test的foo属性(根元素)的值。我的目标大致如下: select cast( '<Test foo="bar"><Otherstuff baz="belch" /></Test>' as xml).value('
<Test foo="bar">
<Otherstuff baz="belch" />
</Test>
我希望能够以varchar的形式获取Test的foo属性(根元素)的值。我的目标大致如下:
select cast( '<Test foo="bar"><Otherstuff baz="belch" /></Test>' as xml).value('@foo','varchar(20)') as Foo
选择强制转换(“”作为xml)。值(“@foo”,“varchar(20)”作为foo
当我运行上述查询时,出现以下错误:
Msg 2390,16级,状态1,第1行
XQuery[value()]:顶级属性
不支持节点
约翰·桑德斯几乎是对的:——)
declare@Data-XML
设置@Data=''
选择@Data.value('(/Test/@foo)[1]','varchar(20')作为foo
这对我很有用(SQLServer2005和2008)
Marc如果您不知道根元素:
select @Data.value('(/*/@foo)[1]','varchar(20)') as Foo
如果您不知道根元素是什么,该怎么办。。???在本例中,我们知道它是“Test”,但我有一个XML字段,它根据另一个字段中的值具有不同的XML。所以它可能是或者。。。是否有可以使用的默认根元素名称…?@Ads使用通配符,例如
//element[@foo]
,或者如果您了解结构/*/Elements/element[@foo]
请将查询包装在括号中。绵羊;我永远也猜不到。TSQL中的XML查询非常有效,但语法太难了。
select @Data.value('(/*/@foo)[1]','varchar(20)') as Foo