1. ホーム
  2. sql

特定の条件をチェックするためにISNULLを使用するのとCOALESCEを使用するのはどっちがいい?

2023-10-29 01:34:20

質問

に複数のパラメータを渡すことができることは知っています。 COALESCE に複数のパラメータを渡すことができるのは知っていますが が存在しないかどうかを確認したい場合、デフォルトを使用するのでしょうか、それとも、より良い方法として ISNULL を使うのが良いのでしょうか?

この2つの間にパフォーマンス上の利点はありますか?

どのように解決するのですか?

この問題は Microsoft Connect で報告されています。 との間にいくつかの違いがあることがわかります。 COALESCEISNULL :

処理の書き換えの初期段階である COALESCE( expression1, expression2 ) として CASE WHEN expression1 IS NOT NULL THEN expression1 ELSE expression2 END . この例では]です。

COALESCE ( ( SELECT Nullable
             FROM Demo
             WHERE SomeCol = 1 ), 1 )

を生成します。

SELECT CASE
          WHEN (SELECT Nullable FROM Demo WHERE SomeCol = 1) IS NOT NULL
          THEN (SELECT Nullable FROM Demo WHERE SomeCol = 1)
          ELSE 1
       END

クエリ処理の後段では、2つのサブクエリがもともと同じ式であったことを理解していないため、サブクエリを2回実行してしまう......。

一つの回避策は、提案したくはないのですが COALESCEISNULL に変更します。後者はサブクエリを重複させないからです。