1

我的存储过程中有输入参数。例如,

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 被给予优先权到@fromDate 即使提供了@Id 并且结果不能依赖于@Id 参数....

4

2 回答 2

1

因为您依赖于这两个参数,所以您可以在以下条件下同时使用它们:

where
(@FromDate is null or ([Created] between @FromDate and @ToDate)) 
or
((@requestId is null or Id=@requestId) 
    and @FromDate is null) ----mix @requestId & @FromDate
于 2013-04-09T06:24:35.847 回答
0

你是这个意思吗?请检查:

WHERE [Created] BETWEEN 
    (CASE WHEN @FromDate IS NOT NULL THEN @FromDate ELSE [Created] END) AND
    (CASE WHEN @ToDate IS NOT NULL THEN @ToDate ELSE [Created] END) AND
    Id=(CASE WHEN @requestId IS NOT NULL THEN @requestId ELSE Id END)
于 2013-04-09T05:36:14.270 回答