【发布时间】:2013-04-09 05:31:36
【问题描述】:
我的存储过程中有你的输入参数。例如,
DECLARE @fromDate DateTime = NULL
DECLARE @toDate DateTime = NULL
DECLARE @Id int = NULL
我想在 where 子句中写一个条件,例如...如果提供了 fromDate,则必须在 @fromDate 上进行搜索。如果未提供@fromDate,则检查@Id 变量,如果它不为空,则根据@Id 搜索...
类似...
where
CASE
when @fromDate is not null
THEN (@FromDate is null or ([Created] between @FromDate and @ToDate))
ELSE (@requestId is null or Id=@requestId)
以下解决方案存在一个问题...如果同时提供了@fromDate 和@Id,那么这将对它们进行检测,并且没有任何返回.....条件应该是...如果给出了@fromDate即使提供了@Id 并且结果不能依赖于@Id 参数,也会优先考虑@fromDate....
【问题讨论】:
-
为什么要支持传递非空
@fromDate和@Id的能力,然后忽略其中之一?如果我正在调用您的过程并为它们两个传递值,我当然不会期望它会按照您的描述进行。 -
总之,寻找这种东西的通常地方是 Erland Sommarskog 的Dynamic search conditions in T-SQL
标签: sql sql-server-2008 stored-procedures