論理関数 - IIF (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
SQL Server ではブール式が true または false のいずれに評価されるかによって、2 つの値のいずれかを返します。
構文
IIF( boolean_expression, true_value, false_value )
引数
boolean_expression
有効なブール式。
この引数がブール式でない場合、構文エラーが発生します。
true_value
boolean_expression が true に評価された場合に返す値。
false_value
boolean_expression が false に評価された場合に返す値。
戻り値の型
内の型からの優先順位が最も高いデータ型を返します true_value と false_valueです。 詳細については、「データ型の優先順位 (Transact-SQL)」を参照してください。
解説
IIF は CASE 式の簡略版です。 最初の引数として渡されたブール式を評価し、評価の結果に基づいて他の 2 つの引数のいずれかを返します。 つまり、 true_value ブール式が true の場合、返されると、 false_value ブール式が false または不明のかどうかに返されます。 任意の型の true_value と false_value を指定できます。 ブール式、NULL 処理、および戻り値の型に対する CASE 式に適用されるのと同じ規則が IIF にも適用されます。 詳細については、「CASE (Transact-SQL)」を参照してください。
IIF が CASE に変換されるという事実は、この関数の動作の他の側面にも影響を与えます。 CASE 式では最大 10 のレベルまで入れ子が許容されるため、IIF ステートメントでも最大 10 のレベルまで入れ子が許容されます。 また、IIF では、意味が同等の CASE 式として他のサーバーにリモート処理を行い、リモート処理された CASE 式のすべての動作を実行します。
Azure Synapse Analytics の専用 SQL プールでは、IIF はサポートされていません。
例
A. 簡単な IIF の例
DECLARE @a INT = 45, @b INT = 40;
SELECT [Result] = IIF( @a > @b, 'TRUE', 'FALSE' );
結果セットは次のようになります。
Result
--------
TRUE
B. NULL 定数を使用する IIF
SELECT [Result] = IIF( 45 > 30, NULL, NULL );
このステートメントの結果はエラーになります。
C. NULL のパラメーターを使用する IIF
DECLARE @P INT = NULL, @S INT = NULL;
SELECT [Result] = IIF( 45 > 30, @P, @S );
結果セットは次のようになります。
Result
--------
NULL