クエリをフィルタリングしたいのですが、構文は知っています:
これが私の間違った構文です:
WHERE
(@StatusId = - 1 then Status.StatusId IN (1, 2, 3, 4))
else
Status.StatusId = @StatusId)
クエリをフィルタリングしたいのですが、構文は知っています:
これが私の間違った構文です:
WHERE
(@StatusId = - 1 then Status.StatusId IN (1, 2, 3, 4))
else
Status.StatusId = @StatusId)
WHERE
(@StatusId = -1 AND Status.StatusID IN (1,2,3,4))
OR
(@StatusId <> -1 AND Status.StatusID = @StatusId)
@StatusId <> -1
@StatusId が null の場合は falseを返すことに注意してください。@StatusId が -1 に等しくない場合にのみ、等価チェックが行われるはずだと想定しています。そうでない場合は、2 番目の句からその部分を削除できます。
ブール論理を使用する必要があります。これを試して:
WHERE
((@StatusId = - 1 AND Status.StatusId IN (1, 2, 3, 4)) OR Status.StatusId = @StatusId)
ステートメント全体が括弧内にあることに注意してください。
このようにすることもできますが、この方法で行うと、クエリのパフォーマンスの問題が発生する可能性があります (パラメーター スニッフィングを検索してください)。の値に応じて正しい SQL を動的に生成し、@StatusID
必要なビットのみを実行することをお勧めします。
Where (
@StatusID = -1 And
Status.StatusID In (1, 2, 3, 4)
) Or (
@StatusID != -1 And
Status.StatusID = @StatusID
)