56

WHERE入力パラメーターを句に含め、null の場合は除外する最良の方法は何ですか?

私が信じている方法はいくつかありますが、そのときは思い出せないようです。

また、使用できCOALESCE()ますか?しかし、これは値を選択するためだけのものだと思いますか?

編集

明確にするために、変数が呼ばれるとしましょう@code ="1"my where になりますWhere type='B' AND code = @codeが、必要な場合@code is nullWhere type='B'、不足していることに注意してcode = @codeください。

4

7 に答える 7

90

IsNullを使用できます

 where some_column = IsNull(@yourvariable, 'valueifnull')

編集

コメントで説明したことは、次のように行うことができます。

where (@code is null or code = @code)
于 2010-11-19T12:35:31.520 に答える
11

これが別のアプローチです

SELECT * FROM Thingies WHERE ( @thingId IS NULL OR ThingID = @thingId )
于 2010-11-19T12:38:34.897 に答える
11

どうですか

WHERE (Column1 = @Var1 OR @Var1 IS NULL)
AND (Column2 = @Var2 OR @Var2 IS NULL)
于 2010-11-19T12:39:12.213 に答える
5

別のサイトで見つけた解決策を提案したいと思います:

SELECT * FROM Thingies 
WHERE ThingID = isnull(@ThingId,ThingID)

このソリューションでは、ユーザーがnullパラメーターを選択すると、クエリはすべての行を結果として返します。

于 2012-08-14T01:29:48.480 に答える
1

ISNULL() を使用するか、他の人が言及したように null を明示的にチェックできます。オプションの入力パラメーターが 1 つまたは 2 つしかない限り、これで問題ありません。しかし、より多くのパラメーターがある場合、これらの列で作成したインデックスが期待どおりに使用されないため、このアプローチは非常に非効率的です。そのような場合は、動的 SQL を使用することをお勧めします。これは、理由を説明する優れた記事ですhttp://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/

于 2010-11-19T15:29:23.943 に答える
0

これが役立つと思います

@id 
@name

SELECT [Id],[Name] FROM [Person] 
WHERE Id = @id and ISNULL(@name, Name)

これにより、Name 条件が null の場合は無視することができます。

于 2020-06-09T14:17:05.403 に答える