当我直接在其工作正常的地方使用参数值但是当我想通过a传递它时 变量它会发生错误:
Msg 8114, Level 16, State 5, Line 7
Error converting data type varchar to bigint.
declare @PostsIds varchar(50)=N'''2'',''1'''
SELECT * FROM mytable
WHERE id in (@PostsIds)
但是这个查询工作正常
declare @PostsIds varchar(50)=N'''2'',''1'''
SELECT * FROM mytable
WHERE id in ('2','1')
答案 0 :(得分:1)
您不能在SQL语句的IN子句中使用变量。您可以在存储过程中执行此操作:
Set @sql='SELECT * FROM mytable WHERE Id IN (' + @PostsIds + ')'
exec sp_executesql @sql
答案 1 :(得分:0)
你的方式无法工作,因为当你传入该变量时,你传入的是一个字符串,而不是IN
所期望的列表。您可以使用动态SQL来解决它,即首先将查询的其余部分创建为nvarchar
变量,将带有列表的变量附加到where子句,然后使用语句sp_executesql
执行语句。