0

次のxmlを解析するための正しいTSQLを手伝ってくれる人はいますか。name要素の値が「y」のアイテムを見つけたいとしますが、「value」要素の値を取得したいとします。これは、以下の例では「2」です。

Declare @XML xml

set @XML ='
<Test>
<items>
<item>
<name>x</name>
<value>1</value>
</item>
<item>
<name>y</name>
<value>2</value>
</item>
</items>
</Test>'

--i am stuck here
selecct @XML.value('Test/items/....")

「y」を検索すると、結果は「2」になります。

これは可能ですか?

誰かが構文を手伝ってくれますか? ありがとう!

4

2 に答える 2

0

これを試して

 select @xml.value('((test/items/item)[2]/value)[1]', 'nvarchar(max)')

壊す:

(test/items/item)[2]  -- find the second instance of an item tag under a test tag

((test/items/item)[2]/value)[1] -- then find the first instance of a value tag under that

値関数には、理論上でも複数の値を返すことができる式を指定することはできません。疑わしい場合は、このように角かっこを付けて(some-expression-here)[1]ください。

指定された名前に対応する値を見つけるには:

 select @xml.value('((test/items/item)[name="y"][1]/value)[1]', 'nvarchar(max)')
于 2012-07-17T21:41:15.790 に答える
0

これには、XQuery (XML データをクエリするように設計されている) を使用する必要がある場合があります。TSQL はそのサブセットをサポートしています。

http://msdn.microsoft.com/en-us/library/ms189075%28SQL.90%29.aspx

于 2012-07-17T22:39:19.393 に答える