在我的数据库中,我有一个Employees表,其中一列名为EmployeeType。我有一个网站,根据该网站显示员工的各种报告。
一份报告应包括EmployeeType=1
,另一份EmployeeType=0
,第三份报告应包括所有员工,无论其员工类型如何。
我希望使用一个存储过程并只传递一个EmployeeType变量。我想我可以执行以下操作并传递0,1,2(EmployeeType为1,EmployeeType 0为1,所有EmployeeTypes为2)。
WHERE (Employee.EmployeeType <> @EmployeeType)
但是,当我传递0或1以外的任何内容时,我只返回EmployeeType = 0。
我猜这是因为2是无效的比特类型。我想知道是否有一种方法可以做我正在寻找的东西,或者我唯一的选择是将EmployeeType更改为诸如int之类的东西,或者创建两个单独的存储过程(一个带有上面列出的WHERE子句和一个没有它。)
答案 0 :(得分:1)
您可以使用案例陈述来完成此任务:
where Employee.EmployeeType = case @EmployeeType
when 0 then 1
when 1 then 0
else Employee.EmployeeType end
查看此sql fiddle以获取有效工作示例。
作为旁注,你说0 for EmployeeType 1, 1 for EmployeeType 0, and 2 for all EmployeeTypes
使这个1更加直观,然后是1然后是0然后是0.你可以将你的陈述缩短为:
where Employee.EmployeeType = case when @EmployeeType != 2
then @EmployeeType
else Employee.EmployeeType end