2009-04-20 108 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