传递将返回所有行的参数

时间:2014-07-09 19:42:13

标签: asp.net sql sql-server stored-procedures

我正在研究一个将调用简单存储过程的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子句一样。

但是,由于管理层的命令:

  1. 我无法更改ASP.NET应用程序中的代码。
  2. 我不能使用动态SQL。
  3. 我只允许修改存储过程。
  4. 有什么方法可以解决这个问题吗?

2 个答案:

答案 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的答案更好......这很有效,但不是很漂亮