动态创建一个IN子句

时间:2014-02-17 13:50:46

标签: c# sql tsql

我创建了一个这样的整数字符串:

var whereClause = "4,5,6"

我需要在以下SQL where子句中使用它,其中message.Idint col

select * from table a where message.Id in (@whereClause)

nvarchar值'4,5,6'转换为数据类型int时,运行此抛出转换失败

如何投射字符串,以便可以在WHERE IN子句中使用?

修改 的 欣赏这可能是一个问题的重复,但我使用Dapper.NET,找不到任何例子

4 个答案:

答案 0 :(得分:1)

引用文章Using comma separated value parameter strings in SQL IN clauses

DECLARE @LIST VARCHAR(200)
SET @LIST = '1,3'
SELECT Id, Descr FROM CSVDemo WHERE Id IN (SELECT * FROM dbo.CSVToTable(@LIST))

答案 1 :(得分:1)

不幸的是,你不能这样做:IN列表的每个项目都需要单独绑定。

首先,您需要使用适当数量的参数生成SQL字符串,如下所示:

select * from table a where message.Id in (@w1, @w2, @w3)

之后,您需要单独绑定每个@wN

答案 2 :(得分:1)

尝试:

exec ('select * from table a where message.Id in ('+@whereClause+')'

答案 3 :(得分:1)

您始终可以使用动态查询,但是将来可能会产生一些令人头疼的问题,因为维护很困难。动态查询应如下所示:

SET @IDs = '4,5,6' 
SET @SQLQuery = 'SELECT * FROM table
WHERE ID IN(' + @IDs + ')'
EXECUTE sp_executesql @SQLQuery