2010-08-11 41 views
2

我有一个字符串,其中包含一个逗号分隔列表的id我想在where子句中使用。从连接字符串的SQL where子句

我该如何做到这一点?基本上我有:

set @ids = '5,8,14,5324,' 

SELECT * FROM theTable WHERE Id IN (@ids) 

但@ids是一个varchar和Id是一个int。

任何想法非常赞赏。

回答

2

另一个选择,而不是动态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) 
1

您必须使用您当前的方法使用动态SQL。确保您的@ids有尾随逗号修剪。

DECLARE @DynSQL NVARCHAR(2000) 

SELECT @DynSQL= 'SELECT * FROM theTable WHERE Id IN (' + @ids + ')' 

EXEC sp_executesql @DynSQL 

请记住,动态SQL运行在其自己的范围内。简单的选择将正常工作。

+1

@DynSQL必须是ntext/nchar/nvarchar – 2010-08-11 20:40:53

+0

@OMG:谢谢,你是对的。 – 2010-08-11 20:42:01

0

或者可以使用一个存储过程与表变量作为输入变量(以下代码从上面的链接假定​​解析功能)然后加入该表以获得结果。