Предложение IIF (Transact-SQL)

В SQL Server 2012 возвращает одно из двух значений в зависимости от того, имеет логическое выражение значение true или false.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL

Синтаксис

IIF ( boolean_expression, true_value, false_value )

Аргументы

  • boolean_expression
    Допустимое логическое выражение.

    Если этот аргумент не является логическим выражением, то возникает ошибка синтаксиса.

  • true_value
    Возвращаемое значение, если выражение boolean_expression истинно.

  • false_value
    Возвращаемое значение, если выражение boolean_expression ложно.

Типы возвращаемых данных

Возвращает тип данных с наивысшим приоритетом из типов, имеющихся в true_value и false_value. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).

Замечания

IIF является быстрым способом написания выражения CASE. Оно вычисляет логическое выражение, переданное в качестве первого аргумента, а затем, исходя из результата вычисления, возвращает один из двух других аргументов. Другими словами, если логическое выражение имеет значение true, то возвращается true_value, если же логическое выражение имеет значение false или неизвестно, то возвращается false_value. Значения true_value и false_value могут быть любого типа. Эти же правила применяются к выражению CASE для логических выражений, обработки значения NULL, а возвращаемые типы также применяются к IIF. Дополнительные сведения см. в разделе Выражение CASE (Transact-SQL).

Тот факт, что IIF переводится в CASE, также оказывает влияние на другие аспекты работы этой функции. Поскольку выражения CASE могут быть вложенными только до уровня 10, инструкции IIF также могут быть вложенными максимум до уровня 10. Кроме того, выполнение IIF переносится на другие серверы как семантически равное выражение CASE, при этом для нее характерно все поведение выполняемого удаленно выражения CASE.

Примеры

А.Пример простой инструкции IIF

DECLARE @a int = 45, @b int = 40;
SELECT IIF ( @a > @b, 'TRUE', 'FALSE' ) AS Result;

Ниже приводится результирующий набор.

Result
--------
TRUE

(1 row(s) affected)

Б.Инструкция IIF с константами NULL

SELECT IIF ( 45 > 30, NULL, NULL ) AS Result;

Результатом выполнения этой инструкции будет ошибка.

В.Инструкция IIF с параметрами NULL

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)