逻辑函数 - IIF (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例
在 SQL Server 中,根据布尔表达式计算为 true 还是 false,返回其中一个值。
语法
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 表达式的快速方法。 它将传递的布尔表达式计算为第一个参数,然后根据计算结果返回其他两个参数之一。 也即,如果布尔表达式为 true,则返回 true_value;如果布尔表达式为 false 或未知,则返回 false_value。 true_value 和 false_value 可以是任何类型。 适用于布尔表达式、null 处理和返回类型的 CASE 表达式的相同规则也适用于 IIF。 有关详细信息,请参阅 CASE (Transact-SQL)。
IIF 转换为 CASE 这一事实也影响此函数的行为的其他方面。 因为 CASE 表达式最多可嵌套 10 层,所以 IIF 语句最多也只能嵌套 10 层。 此外,IIF 将作为语义上等同的 CASE 表达式对其他服务器远程执行,且具备远程执行的 CASE 表达式的所有行为。
IIF 在 Azure Synapse Analytics 专用 SQL 池中不受支持。
示例
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