我正在研究一个将调用简单存储过程的ASP.NET应用程序。 SP看起来像这样:
Select *
from empTable
where ID = @ID AND Department = @DeptID
and status = @status
and role = @role
ASP.NET应用程序将值传递给存储过程中的每个参数。每个参数都可以为null或具有值。但是,如果用户不输入任何内容(null或空),则应该返回empTable
中的所有内容,就像Select * from empTable
没有Where
子句一样。
但是,由于管理层的命令:
有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
通过更改WHERE子句并指定默认值使参数成为可选参数。
CREATE PROCEDURE MyProc
@ID INT = NULL
AS
Select * from empTable where ID = ISNULL(@ID, ID);
答案 1 :(得分:0)
案例陈述有效...用例来设置1 = 1当@id ='all'时(或者你希望@id等于所有人)
Select * from empTable where
case when @id = 'all' then 1 else id end
=
case when @id = 'all' then 1 else @id
JodyT的答案更好......这很有效,但不是很漂亮