查询按参数返回所有或部分位值

时间:2015-04-07 21:48:12

标签: sql sql-server-2008

在我的数据库中,我有一个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子句和一个没有它。)

1 个答案:

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