如何在SQL Server 2005中选择xml列的顶级属性?

Ale*_*rgo 23 xml sql sql-server xpath

我在SQL Server 2005中有一个xml列,相当于:

<Test foo="bar">
  <Otherstuff baz="belch" />
</Test>
Run Code Online (Sandbox Code Playgroud)

我希望能够将Test(根元素)的foo属性的值作为varchar.我的目标是:

select cast( '<Test foo="bar"><Otherstuff baz="belch" /></Test>' as xml).value('@foo','varchar(20)') as Foo
Run Code Online (Sandbox Code Playgroud)

当我运行上面的查询时,我收到以下错误:

消息2390,级别16,状态1,行1 XQuery [value()]:不支持顶级属性节点

mar*_*c_s 45

John Saunders几乎是对的:-)

declare @Data XML
set @Data = '<Test foo="bar"><Otherstuff baz="belch" /></Test>'

select @Data.value('(/Test/@foo)[1]','varchar(20)') as Foo
Run Code Online (Sandbox Code Playgroud)

这对我有用(SQL Server 2005和2008)

  • @Ads使用通配符,例如`// Element [@foo]`或者你知道结构`/*/Elements/Element [@foo]` (2认同)

boj*_*rov 6

如果您不知道根元素:

select @Data.value('(/*/@foo)[1]','varchar(20)') as Foo
Run Code Online (Sandbox Code Playgroud)