2012-03-27 6 views
4
<book> 
<author>Bob Villa</author> 
<author>Tom Whatever</author> 
<author>Sarah kajdl</author> 
</book> 

Tom Whateverの著者がいたレコードをどのように問い合せますか?私が見たクエリの例は、値[x]を参照していますが、すべての著者を検索したいと思います。ここで複数のXML値をクエリ

DECLARE @author as varchar(100) 
SET @author = 'Tom Whatever' 
SELECT xmlfield.value('/book/author') 
WHERE xmlfield.value('/book/author') = @author 

答えて

4

あなただけのXML変数の値は、あなたが直接valueメソッドを使用して、XPath式でsql:variableを使用することができますしたい場合は答え

DECLARE @x XML 
SET @x = '<book> 
<author>Bob Villa</author> 
<author>Tom Whatever</author> 
<author>Sarah kajdl</author> 
</book>' 

DECLARE @author AS VARCHAR(100) 
SET @author = 'Tom Whatever' 
SELECT c.value('.' ,'VARCHAR(100)') 
FROM @x.nodes('book/author') AS t(c) 
WHERE c.value('.' ,'VARCHAR(8000)') = @author 
+0

この場合、「著者」というタグのすべての外観を照会したいのですか? http://stackoverflow.com/questions/26426412/how-to-ensure-the-sql-isable-to-read-all-xml-tag-data – SearchForKnowledge

3

です:

SELECT @XML.value('(/book/author[.=sql:variable("@author")])[1]', 'nvarchar(50)') 

テーブルにXMLがあり、作成者がいる行が必要な場合は、existを使用できます。

select * 
from YourTable 
where XMLCol.exist('/book/author[.=sql:variable("@author")]') = 1 

もちろん、それらを組み合わせることもできます。

select XMLCol.value('(/book/author[.=sql:variable("@author")])[1]', 'nvarchar(50)') 
from YourTable 
where XMLCol.exist('/book/author[.=sql:variable("@author")]') = 1