1

ストアド プロシージャには 3 つの入力パラメータがあります。例えば、

DECLARE @fromDate DateTime = NULL 
DECLARE @toDate DateTime = NULL
DECLARE @Id int = NULL

where 句に次のような条件を記述したい... fromDate が指定されている場合は、@fromDate で検索する必要があります。@fromDate が提供されていない場合は、@Id 変数をチェックします。これが null でない場合は、@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)

以下の解決策には1つの問題があります... @fromDate と @Id の両方が提供されている場合、これはそれらのインテセクトを実行し、何も返されません...条件は次のようになります... @fromDate が与えられた場合、優先度が与えられます@Id が提供され、結果が @Id パラメータに依存してはならない場合でも、@fromDate に....

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 に答える