在Where子句中添加参数时,它返回Zero行

时间:2014-05-12 16:40:36

标签: sql-server

Create table TmpEmp(Empcode int,Ename nvarchar(50),department nvarchar(50))

Insert into TmpEmp values(1001,'Scott','IT')
Insert into TmpEmp values(1002,'Peter','IT')
Insert into TmpEmp values(1003,'Ricky','HR')

select * from TmpEmp

Declare @Department nvarchar(50)
Set @Department = '''IT'',''HR'''
--Set @Department = 'ALL'
--print @Department
select * from TMPEMP where (1=1)
and Department in 
(case @Department when 'ALL' then Department else @Department End )

1 个答案:

答案 0 :(得分:0)

首先,你的@Department变量没有字符串ALL

Set @Department = '''IT'',''HR'''

其次,它以逗号分隔的字符串;所以你不能使用=运营商。相反,你必须使用LIKE运算符。如果我只是更改您发布的代码如下;结果将被退回

Declare @Department nvarchar(50);
Set @Department = '''IT'',''ALL''';

select * from TMPEMP where (1=1)
and Department in 
(case when @Department like '%ALL%' then Department else @Department End )  

更改您的查询以使用IN运算符。请参阅此小提琴演示http://sqlfiddle.com/#!3/4d9c9/20

select * from TMPEMP 
where Department in (case when @Department not in ('ALL')
 then Department else @Department End )