这是一个有趣的挑战。
我有一个带有这样的select语句的sp:
从员工
中选择*
我想要的是用户可以使用或不使用employee type参数调用此存储过程。 假设一个例子,员工类型允许'内部'外部'只有价值。这是一个可选参数。
我们想要调用此SP,sp应该只用一个select语句执行
所以我想:
select * from employee
or
select * from employee where employeetype in ('Internal')
我想把它合二为一。
我不想使用If Statement。
如果未提供EmployeeType,则应返回整个员工列表。
请注意,我可以在变量中包含多个员工类型,因此它必须类似于
@employeeType ='内部,外部,主管' 从员工中选择* 哪里 员工(@employeeType)
- 当EmployeeType为空时运行此
or EmployeeType = EmployeeType
答案 0 :(得分:2)
您可以使用参数来获得结果。添加一个输入参数,该参数接受值“内部”,“外部”或空。如果为空,则应返回完整数据。为此,您可以使用案例陈述。请参阅以下示例:
select *
from
employee
where
employeetype =case when isnull(@var, '')='' then employeetype else @var end
注意:变量@var
接受“内部”或“外部”值。要获取完整数据,请指定为空。
如果变量@var为null,则可以使用下面的查询。
select *
from
employee
where
employeetype =isnull(@var, employeetype)
对于昏迷分隔值,请尝试:
select *
from
employee
where
employeetype =(select col from fnSplit(case when isnull(@var,'')=''
then employeetype else @var end, ','))
答案 1 :(得分:1)
假设你有一个SP带一个参数@EType
然后使用值或NULL将您的参数发送到SP,并像这样修改您的SP ..
Select * From Employees
Where (EmployeeType = @eType OR @eType is NULL)
答案 2 :(得分:0)
where @EmployeeType is null or EmployeeType = @EmployeeType