新しいプログラミング言語を学ぶ学生は、多くの場合、最初のレッスンを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を指定した場合でも) または空の文字列)。