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 )
答案 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 )