【发布时间】:2009-09-20 10:17:16
【问题描述】:
我有以下疑问:
DECLARE @IsStocked bit
SELECT * FROM Products p WHERE p.LastSeen > GETDATE() - 30
这将返回过去 30 天内看到的所有 产品。
我的问题是,我希望 p.LastSeen > GETDATE() - 30 子句仅在 @IsStocked = true 时适用。
这是一个更大查询的一部分,我想在不使用 IF/ELSE 语句的情况下实现这一点(即,如果 WHERE 子句的 @IsStocked = false p.LastSeen > GETDATE() - 30 部分被完全忽略)。
谢谢!
【问题讨论】:
-
为什么不使用 IF/ELSE?另一种选择可能会导致不正确的缓存查询计划....
-
真正简单起见 - 存储过程中大约有 10 个变量 - 所有这些变量都可以是真/假或空 - 除非有一种方法可以建议不会导致 IF/ELSE每个?谢谢!
标签: sql sql-server-2008 where-clause