2009-04-20 15 views
18

SQL Server 2005'teSQL Server 2005'te bir xml sütununun en üst düzey özelliğini nasıl seçerim?

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

eşdeğeri olan bir xml sütunu var. Testin foo özniteliğinin değerini (bir kök öğesi) bir varchar olarak alabilmek istiyorum. Amacım şu satırlar boyunca bir şey olurdu:

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

Yukarıdaki sorguyu çalıştırdığımda aşağıdaki hatayı alıyorum:

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

cevap

39

John Saunders neredeyse sağ :-)

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

select @Data.value('(/Test/@foo)[1]','varchar(20)') as Foo 
o vardır Bu, benim için çalışıyor (SQL Server 2005 ve 2008)
+0

ne kök öğesi nedir bilmiyorsanız .. ??? Bu durumda "Test" olduğunu biliyoruz, ancak başka bir alandaki değere bağlı olarak farklı XML'e sahip bir XML alanım var. Yani veya olabilir ... kullanabileceğimiz bir varsayılan kök öğe adı var .. ??? – Ads

+2

@Reklam bir joker kullanın, ör. '// Element [@foo]' veya yapı hakkında birşey biliyorsanız '/ */Elements/Element [@foo]' – StuartLC

+0

Sorguyu parens içinde sarın. sheesh; Ben asla tahmin edemezdim. TSQL'de XML sorgulaması harika çalışıyor, ancak sözdizimi çok zor. – dudeNumber4

3

kök elemanı bilmiyorsanız:

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