日期:2014-05-18  浏览次数:20574 次

IN和字符串结合使用的怪问题,急!
一个存储过程中需要将一个包含子查询结果的字符串嵌入IN中执行

declare   @s   varchar(50)
set   @s   =   '888,889,890 '     --这里我直接赋值了,实际是从另一个查询语句得到的
select   *   from   EmpNow_State   where   id   in   (@s)
报错:
服务器:   消息   245,级别   16,状态   1,行   3
将   varchar   值   '888,889,890 '   转换为数据类型为   int   的列时发生语法错误。


------解决方案--------------------
--用动态SQL,如下:

declare @s varchar(50),@s2 varchar(8000)
set @s = '888,889,890 ' --这里我直接赋值了,实际是从另一个查询语句得到的

set @s2= 'select * from EmpNow_State where id in ( ' + @s + ') '
exec (@s2)