新しいプログラミング言語を学ぶ学生は、多くの場合、最初のレッスンをIF
で開始します。 ステートメント。式が真の場合にのみ、ステートメントが値を返します。
その後、IF... ELSE
に進む可能性があります ステートメント。式がfalseの場合に返す別の値を決定できます。したがって、式がtrueの場合は1つの値を返し、falseの場合は別の値を返します。
SQLServerには確かにIF... ELSE
が含まれています T-SQLツールボックスのステートメント。
SQL Serverには、IIF()
も含まれています 関数。これは同様のことを行いますが、構文はより簡潔です。
ただし、微妙な違いがいくつかあります。
違い
次の表に、IF
の主な違いの概要を示します。 ステートメントとIIF()
機能。
IF | IIF() | |
---|---|---|
タイプ | フロー制御ステートメント。 | 論理関数。 |
結果はどのように決定されますか? | 実行するSQLステートメントまたはステートメントブロックを指定します。 | 返す実際の値を指定します。 |
ネスト? | ネストされたレベルの数の制限は、使用可能なメモリによって異なります。 | ネストできるのは最大レベル10までのみです。 |
式がfalseを返した場合はどうなりますか? | ELSE キーワードはオプションです(つまり、誤った結果に対応するかどうかを選択できます)。 | trueとfalseの両方の値が必要です(つまり、falseの結果に対応する必要があります)。 |
IIF()
関数は、実際にはCASE
を作成するための簡単な方法です。 表現。したがって、CASE
と同じ制限があります。 IF
とは異なる式 ステートメント。
IFステートメント
これがIF
です ステートメント。
IF 1 < 2 SELECT 'True';
結果:
True
この場合、評価する式は1 < 2
です。 。 1が2未満であることは事実なので、SELECT
ステートメントが実行され、True
返されました。
ただし、式がfalseの場合、何も起こりません。
IF 1 > 2 SELECT 'True';
結果:
Commands completed successfully.
SQL Serverが教えてくれたのは、コマンドが正常に完了したということだけです。他に何も指定されていないため、他に何も返されませんでした。
IF…ELSEステートメント
この場合、オプションのELSE
を追加できます IF
に ステートメント、それがIF... ELSE
になるように ステートメント。
IF 1 > 2
SELECT 'True';
ELSE
SELECT 'False';
結果:
False
これで、式がfalseの場合にも結果が得られます。
IIF()関数
IIF()
関数を使用すると、より簡潔な構文を使用して同じロジックを記述できます。
したがって、前の例を次のように書き直すことができます。
SELECT IIF( 1 > 2, 'True', 'False' );
結果:
False
IIF()
関数は基本的に、IF... ELSE
を実行するためのより簡潔な方法です。 声明。
実際、それは部分的にしか真実ではありません。前述のように、IIF()
関数はCASE
に基づいています 式であるため、CASE
と同じ制限があります 式(最大レベル10までしかネストできないなど)。
したがって、前のステートメントは次のステートメントと同等です。
SELECT
CASE WHEN 1 > 2 THEN 'True'
ELSE 'False'
END;
結果:
False
IIF()
に注意してください 2つの引数が必要なため、式の結果がfalseの場合に返す値を指定する必要があります(NULL
を指定した場合でも) または空の文字列)。