如何通过变量将值传递给where参数?

时间:2014-04-18 19:20:19

标签: sql-server

当我直接在其工作正常的地方使用参数值但是当我想通过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') 

2 个答案:

答案 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执行语句。