改进了where子句

时间:2013-01-03 07:44:40

标签: sql stored-procedures where

我想在具有此功能的sql存储过程中编写where子句。

if (@userId=0)
begin
    SELECT * from tblUsers
end
else
begin
    SELECT * from tblUsers
    WHERE userId= @userId
end

当我向存储过程发送id(example:123)时,它应该带给我特定的一个,当我发送“0”作为id它应该返回整个数据 但我不想使用if else。应该有一些东西可以改进我的where子句。

例如

SELECT * from tblUsers
WHERE (userId= @userId OR @userId = 0) and @userId = 123... bla bla

(或者当然不是这样)

任何帮助?

2 个答案:

答案 0 :(得分:3)

您可以在where子句中使用案例条件:

SELECT 
  * 
from 
  tblUsers
WHERE
  userId=(case when @userId=0 then userId else @userId end)

答案 1 :(得分:1)

仅在建议时,如果你在@userid中传递null,那么你可以轻松地做到这一点

SELECT * from tblUsers
    WHERE userId= Isnull(@userId,userId)

这可以避免额外的条件......如果没有数据或者你可以这样做就传递@ useId = null

if (@userId=0)
  select @userId = null
SELECT * from tblUsers
    WHERE userId= Isnull(@userId,userId)