<book>
<author>Bob Villa</author>
<author>Tom Whatever</author>
<author>Sarah kajdl</author>
</book>
我如何查询任何有Tom Whatever作者的唱片?我见过的大多数查询示例都引用了值[x],但我想搜索所有作者。
DECLARE @author as varchar(100)
SET @author = 'Tom Whatever'
SELECT xmlfield.value('/book/author')
WHERE xmlfield.value('/book/author') = @author
答案 0 :(得分:4)
以下是答案
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
答案 1 :(得分:3)
如果您只想要XML变量中的值,可以直接使用value
方法并在XPath表达式中使用sql:variable
:
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