IIF (Transact-SQL)
在 SQL Server 中,根据布尔表达式计算为 true 还是 false,返回其中一个值。
适用范围:SQL Server(SQL Server 2012 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。 |
语法
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 表达式的所有行为。
示例
A.简单 IIF 示例
DECLARE @a int = 45, @b int = 40;
SELECT IIF ( @a > @b, 'TRUE', 'FALSE' ) AS Result;
下面是结果集:
Result
--------
TRUE
(1 row(s) affected)
B.带有 NULL 常量的 IIF
SELECT IIF ( 45 > 30, NULL, NULL ) AS Result;
此语句的结果是一个错误。
C.具有 NULL 参数的 IIF
DECLARE @P INT = NULL, @S INT = NULL;
SELECT IIF ( 45 > 30, @p, @s ) AS Result;
下面是结果集:
Result
--------
NULL
(1 row(s) affected)