我创建了一个这样的整数字符串:
var whereClause = "4,5,6"
我需要在以下SQL where
子句中使用它,其中message.Id
是int
col
select * from table a where message.Id in (@whereClause)
将nvarchar
值'4,5,6'转换为数据类型int
时,运行此抛出转换失败。
如何投射字符串,以便可以在WHERE IN
子句中使用?
修改 的 欣赏这可能是一个问题的重复,但我使用Dapper.NET,找不到任何例子
答案 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