【发布时间】:2013-06-01 11:11:56
【问题描述】:
我有一个存储过程,当我执行它时出现错误
将 varchar 值 '+@dptId+' 转换为数据类型 int 时转换失败
我将DepartmentId 作为一个字符串,如(1,3,5,77),并将其传递给我的存储过程。
create table dummy (id int,name varchar(100),DateJoining Datetime, departmentIt int)
insert into dummy values (1,'John','2012-06-01 09:55:57.257',1);
insert into dummy values(2,'Amit','2013-06-01 09:55:57.257',2);
insert into dummy values(3,'Naval','2012-05-01 09:55:57.257',3);
insert into dummy values(4,'Pamela','2012-06-01 09:55:57.257',4);
insert into dummy values(5,'Andrea','2012-09-01 09:55:57.257',3);
insert into dummy values(6,'Vicky','2012-04-01 09:55:57.257',4);
insert into dummy values(7,'Billa','2012-02-01 09:55:57.257',4);
insert into dummy values(8,'Reza','2012-04-01 09:55:57.257',3);
insert into dummy values (9,'Jacob','2011-05-01 09:55:57.257',5);
我试过的查询:
declare @startdate1 varchar(100) ='20120201'
declare @enddate1 varchar(100)='20130601'
declare @dptId varchar(100)='3,4'
select *
from dummy
where DateJoining >= @startdate1 and DateJoining < @enddate1
and departmentIt IN (@dptId);
【问题讨论】:
-
IN不能这样工作。departmentIt = @dptId1 or departmentIt = @dptId2;怎么样? -
之前我使用像
departmentIt in (1,3)这样的简单查询字符串及其工作原理,现在当我使用参数化查询时出现错误。 -
departmentIt in (1,3)有效,但departmentIt in ('1,3')无效,因为它只是 1 值 - 一个字符串而不是 2 个数字。 -
@juergend: 是的,我明白这就是错误,但使用
or也无法完成,因为我将@dptId值作为字符串 -
请多做一些搜索,因为这不是一个不常见的问题。可以使用动态 SQL 来完成。试试谷歌:
sql dynamic "in" comma separated
标签: stored-procedures sql-server-2008-r2 parameterized