我有一个字符串,其中包含一个以逗号分隔的id列表,我想在where子句中使用它。
我怎样才能做到这一点?基本上我有:
set @ids = '5,8,14,5324,'
SELECT * FROM theTable WHERE Id IN (@ids)
但是@ids是一个varchar而Id是一个int。
任何想法都非常感激。
答案 0 :(得分:2)
另一个选择而不是动态SQL是将@ids解析为#TempTable(解析函数的一个例子是here),然后加入它。
select *
from theTable t1
inner join #TempTable t2
on t1.Id = t2.Id
或者您可以完全绕过#TempTable(以下代码假定上面链接中的解析函数)
select *
from theTable t1
inner join dbo.fnParseStringTSQL(@ids, ',') t2
on t1.Id = cast(t2.string as int)
答案 1 :(得分:1)
您必须使用当前方法的动态SQL。确保您的@ids
已修剪尾随逗号。
DECLARE @DynSQL NVARCHAR(2000)
SELECT @DynSQL= 'SELECT * FROM theTable WHERE Id IN (' + @ids + ')'
EXEC sp_executesql @DynSQL
请记住,动态SQL在自己的范围内运行。简单的选择将正常工作。
答案 2 :(得分:0)
或者您可以使用带有表变量的存储过程作为输入变量,然后加入该表以获取结果。