0

我想在具有此功能的 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

(或者当然不是)

有什么帮助吗?

4

2 回答 2

3

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

SELECT 
  * 
from 
  tblUsers
WHERE
  userId=(case when @userId=0 then userId else @userId end)
于 2013-01-03T07:46:39.600 回答
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)
于 2013-01-03T07:57:38.247 回答