2009-04-20 107 views
18

我在SQL Server 2005中一个XML列,它是等价的:如何在SQL Server 2005中选择xml列的顶级属性?

<Test foo="bar"> 
    <Otherstuff baz="belch" /> 
</Test> 

我希望能够得到测试(根元素)为VARCHAR foo的属性值。我的目标是沿着线的东西:

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

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

Msg 2390, Level 16, State 1, Line 1 XQuery [value()]: Top-level attribute nodes are not supported

回答

39

约翰·桑德斯有它差不多吧:-)

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

select @Data.value('(/Test/@foo)[1]','varchar(20)') as Foo 

这适用于我(SQL Server 2005和2008)

Marc

+0

,如果你不知道什么是根元素是什么.. ???在这种情况下,我们知道它是“Test”,但是我有一个XML字段,它具有不同的XML,具体取决于另一个字段中的值。所以它可能是 ...是否有我们可以使用的默认根元素名称..? – Ads 2013-02-20 10:12:28

3

如果你不知道的根元素:

select @Data.value('(/*/@foo)[1]','varchar(20)') as Foo