如何在SQLServer2005中选择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('

我在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('@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