Sql 不考虑条件
假设我有一个参数@UserID,它可以是0,没有分配UserID,也可以是id本身。 查询的结构如下所示Sql 不考虑条件,sql,sql-server,Sql,Sql Server,假设我有一个参数@UserID,它可以是0,没有分配UserID,也可以是id本身。 查询的结构如下所示 if @UserID > 0 select ... where UserID=@UserID ... else if @UserID = 0 select ... where ... 我想要的是以下结构 select ... where if @UserID >0 then UserID = @UserID else disregard this condition
if @UserID > 0
select ...
where UserID=@UserID
...
else if @UserID = 0
select ...
where ...
我想要的是以下结构
select ...
where if @UserID >0 then UserID = @UserID else disregard this condition
...
谢谢将null设置为参数值,而不是0
declare @id int
set @id = null
select *
from users
where (id = @id)
or (@id is null)
将null设置为参数值,而不是0
declare @id int
set @id = null
select *
from users
where (id = @id)
or (@id is null)
将案例陈述用作:
WHERE 1 = CASE
WHEN @UserID >0 and UserID = @UserID THEN 1
ELSE 0
END
将案例陈述用作:
WHERE 1 = CASE
WHEN @UserID >0 and UserID = @UserID THEN 1
ELSE 0
END
1=1用于忽略WHERE条件,如果@userID的值为0,则会发生这种情况
1=1用于忽略WHERE条件,如果为@userID提供值0,则会发生这种情况
您的案例中提到的一种模式如下:
SELECT … WHERE @UserID = 0 OR UserID = @UserID
-- ^^^^^^^^^^^^^^
简而言之:如果@UserID=0,则整个OR条件的计算结果为true,因此无论UserID=@UserID与否,都不会导致任何记录被过滤掉。因此,当@UserID=0时,后一个标准基本上被忽略
备注1:通常选择NULL而不是0
备注2:如果我没记错的话,这种模式可能会对查询优化器产生不好的影响,因此如果您是这样的话,也许可以在上面提到的文章中阅读一下。我只是很快地进行了检查,我认为Erland Sommarskog建议使用查询优化器提示选项重新编译
我想推荐
您的案例中提到的一种模式如下:
SELECT … WHERE @UserID = 0 OR UserID = @UserID
-- ^^^^^^^^^^^^^^
简而言之:如果@UserID=0,则整个OR条件的计算结果为true,因此无论UserID=@UserID与否,都不会导致任何记录被过滤掉。因此,当@UserID=0时,后一个标准基本上被忽略
备注1:通常选择NULL而不是0
备注2:如果我没记错的话,这种模式可能会对查询优化器产生不好的影响,因此如果您是这样的话,也许可以在上面提到的文章中阅读一下。我只是很快地进行了检查,我认为Erland Sommarskog建议使用查询优化器提示选项重新编译
你能扩展你的答案吗?你能扩展你的答案吗?