我有一个字符串,其中包含一个逗号分隔列表的id我想在where子句中使用。从连接字符串的SQL where子句
我该如何做到这一点?基本上我有:
set @ids = '5,8,14,5324,'
SELECT * FROM theTable WHERE Id IN (@ids)
但@ids是一个varchar和Id是一个int。
任何想法非常赞赏。
我有一个字符串,其中包含一个逗号分隔列表的id我想在where子句中使用。从连接字符串的SQL where子句
我该如何做到这一点?基本上我有:
set @ids = '5,8,14,5324,'
SELECT * FROM theTable WHERE Id IN (@ids)
但@ids是一个varchar和Id是一个int。
任何想法非常赞赏。
另一个选择,而不是动态SQL将解析@TempTable到一个#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)
您必须使用您当前的方法使用动态SQL。确保您的@ids
有尾随逗号修剪。
DECLARE @DynSQL NVARCHAR(2000)
SELECT @DynSQL= 'SELECT * FROM theTable WHERE Id IN (' + @ids + ')'
EXEC sp_executesql @DynSQL
请记住,动态SQL运行在其自己的范围内。简单的选择将正常工作。
或者可以使用一个存储过程与表变量作为输入变量(以下代码从上面的链接假定解析功能)然后加入该表以获得结果。
@DynSQL必须是ntext/nchar/nvarchar – 2010-08-11 20:40:53
@OMG:谢谢,你是对的。 – 2010-08-11 20:42:01