逻辑函数 - IIF (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

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

Transact-SQL 语法约定

语法

IIF( boolean_expression, true_value, false_value )

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

自变量

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  

后续步骤