2009-04-20 10 views
18
Testのfoo属性(ルート要素)の値をvarcharとして取得したいと考えています。 上記のクエリを実行すると、次のエラーが表示されます。

答えて

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

あなたはルート要素が何であるか何を知っていない場合は...?この場合は「テスト」であることがわかりますが、別のフィールドの値に応じてXMLが異なるXMLフィールドがあります。だからまたは ...デフォルトのルート要素名を使用できますか???? – Ads

+2

@Adsはワイルドカードを使用します(例: '//Elements/Element [@foo]' – StuartLC

+0

括弧で囲んでください。シース;私は推測していないでしょう。 TSQLのXMLクエリはうまくいくが、構文はあまりにも難しい。 – dudeNumber4

3

あなたはルート要素を知らない場合:

select @Data.value('(/*/@foo)[1]','varchar(20)') as Foo 
関連する問題