日期:2014-05-17  浏览次数:20877 次

求xml字段的in查询方法
记得看过xml字段的in查询方法.但没有记住,出处也找不到了.
大约是这样子的要求

--建一个测试表
create   table   #t
(
className   nvarchar(50),
class   int
)
go
--插入几个测试记录
insert   into   #t   values( 'abc ',1)
insert   into   #t   values( 'def ',2)
insert   into   #t   values( 'ghi ',3)
insert   into   #t   values( 'jkl ',4)
insert   into   #t   values( 'mno ',5)
go

declare   @xml   xml;--定义个xml变量
set   @xml= '
<root>
    <item   type= "class "   value= "2 "   />
    <item   type= "class "   value= "4 "   />
</root> ';

SELECT   *     FROM   #t
where   class   in
(
select   @xml.query( 'for   $x   in   //item     return   <s> {data($x/@value)} </s> ')   from   Join_member
)
go
drop   table   #t
go

要求   是想从#t内查询出class值是在@xml中的/root/item/@value中的记录,,,,,,,,,,,,,,,,,,
但上面的查询是错的,,,,
错误消息是
操作数类型冲突:   xml   与   int   不兼容



------解决方案--------------------
SQL code
SELECT   *     FROM   #t 
where @xml.exist('//item[@value=sql:column("class")]')=1