2016-12-29 5 views
1

ISNULL条件を使用して学生の住所を確認する方法は次のとおりです。 それは正常に動作しますが、ISNULL関数がヌルコーディション、つまり最初の条件がnullの場合に表示される2番目のパラメータをどのように処理するかを示します。SQL ServerでのISNULLの実行

最初の条件がnullでない場合、2番目のパラメータの値が計算されますか? ISNULL内部

select 
    ... 
    ... 
    (CASE 
     WHEN st.ADDRESS='Y' THEN st.LOCATION 
     ELSE 
      ISNULL(
       (SELECT TOP 1 STDLOC.LOCATION FROM STDLOC 
        INNER JOIN COMLOC ON STKLOC.LOCATION=COMLOC.CODE AND COMLOC.ADDRESS='Y' 
        WHERE STDLOC.ZIBCODE=st.ZIBCODE) 
       ,(SELECT TOP 1 COMLOC.LOCATION FROM COMLOC COMLOC.ZIBCODE=st.ZIBCODE))      
     END 
     ) AS STDUDENTLOCATION 
    FROM STUDENT st 
+0

は、あなたが求めている:

このPOSTは、質問に対する良い答えを提供しますか?ところで、ORDER BY句なしでTOP 1を選択すると、ORDER BY句なしで返される行の順序が保証されないため、実際には1つのランダムレコードが取得されます。 –

+0

最初の値がnullでない場合Isnullは2番目の条件内のwhatsをチェックしません?? –

答えて

4

両方のクエリが最初のクエリは、値が返された場合でも、実行されます。 、

enter image description here

あなたがはっきりと見ることができるように:

は、サンプルテーブルを作成し、移入:

DECLARE @T AS TABLE 
(
    Col int 
) 
INSERT INTO @T Values(1),(2) 

SELECT ISNULL(
    (SELECT TOP 1 Col FROM @T ORDER BY Col DESC), 
    (SELECT TOP 1 Col FROM @T ORDER BY Col) 
) 

実行計画の画像をここで

は私が作った簡単なテストであります実行計画には両方のクエリが含まれます。

-1

ISNULLは、最初のパラメータがNULL(https://msdn.microsoft.com/en-us/library/ms184325.aspx)の場合、指定された2番目のパラメータを戻り値として使用するT-SQL固有の関数です。

複数の引数から最初のNULL以外の値を返す場合は、COALESCE関数を使用します。これは、すべてのタイプのリレーショナルデータベースでサポートされている標準関数です。第1の選択に戻り場合はnullを選択秒のみ発生するかどう

Is Sql Server's ISNULL() function lazy/short-circuited?

+0

正しいとはいえ、私はそれが問題だとは思わない。 –

関連する問題