我的表中有XML列,可以包含这两条记录的XML:
记录1,假设记录的ID为1,XML内容为
<content>
<node1 >10</node1>
<node2 >20</node2>
<node3 >30</node3>
<node4 >40</node4>
<node5 >50</node5>
</content>
记录2,假设记录的ID是2,XML内容是
<content>
<node_name_1 >10</node_name_1>
<hello >20</hello>
</content>
我想知道内部节点值为10的记录的ID。
declare @ids nvarchar(500)
set @ids = '10';
select id from tablename
where
convert(nvarchar(max),xmlfieldname.query('data(/content/* = ( sql:variable("@ids") ) )') ) = 'true'
这是完美的工作,但我的问题是当我想为内部节点使用多个值时。我想知道内部值为10或20的记录的ID。此查询非常有效:
select id from tablename
where
convert(nvarchar(max),xmlfieldname.query('data(/content/* = ( 10,20 ) )') ) = 'true'
但是当我使用sql:variable时,没有返回任何内容!
declare @ids nvarchar(500)
set @ids = '10,20';
select id from tablename
where
convert(nvarchar(max),xmlfieldname.query('data(/content/* = ( sql:variable("@ids") ) )') ) = 'true'
我如何使用像mytable中的Select *这样的东西,其中在XML中的''123','456'中的fieldname?
答案 0 :(得分:0)
你要求它找到该值为“10,20”的条目,就好像你在说“where fieldname in('10,20')”。
这是古老的斯普利特问题......
所以......试试:
declare @qry nvarchar(max);
select @qry = 'select id from tablename where convert(nvarchar(max),xmlfieldname.query(''data(/content/* = ( ' + @ids + ' ) )'') ) = ''true''';
exec sp_executesql @qry
罗布