IIF (Transact-SQL)

在 SQL Server 中,根据布尔表达式计算为 true 还是 false,返回其中一个值。

主题链接图标 Transact-SQL 语法约定

适用范围: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)

请参阅

参考

CASE (Transact-SQL)

CHOOSE (Transact-SQL)