0

クエリをフィルタリングしたいのですが、構文は知っています:

これが私の間違った構文です:

WHERE 
 (@StatusId = - 1 then Status.StatusId IN (1, 2, 3, 4)) 
else 
  Status.StatusId = @StatusId)
4

3 に答える 3

1
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 番目の句からその部分を削除できます。

于 2012-11-30T20:09:42.153 に答える
0

ブール論理を使用する必要があります。これを試して:

WHERE 
 ((@StatusId = - 1 AND Status.StatusId IN (1, 2, 3, 4)) OR Status.StatusId = @StatusId)

ステートメント全体が括弧内にあることに注意してください。

于 2012-11-30T20:09:37.037 に答える
0

このようにすることもできますが、この方法で行うと、クエリのパフォーマンスの問題が発生する可能性があります (パラメーター スニッフィングを検索してください)。の値に応じて正しい SQL を動的に生成し、@StatusID必要なビットのみを実行することをお勧めします。

Where (
  @StatusID = -1 And 
  Status.StatusID In (1, 2, 3, 4)
) Or (
  @StatusID != -1 And
  Status.StatusID = @StatusID
)
于 2012-11-30T20:10:08.223 に答える