Export (0) Print
Expand All

IIF (Transact-SQL)

Applies To: SQL Server 2014, SQL Server 2016 Preview

Topic Status: Some information in this topic is preview and subject to change in future releases. Preview information describes new features or changes to existing features in Microsoft SQL Server 2016 Community Technology Preview 2 (CTP2).

Returns one of two values, depending on whether the Boolean expression evaluates to true or false in SQL Server.

Topic link icon Transact-SQL Syntax Conventions

Applies to: SQL Server (SQL Server 2012 through current version), Azure SQL Database.

IIF ( boolean_expression, true_value, false_value )


A valid Boolean expression.

If this argument is not a Boolean expression, then a syntax error is raised.


Value to return if boolean_expression evaluates to true.


Value to return if boolean_expression evaluates to false.

Returns the data type with the highest precedence from the types in true_value and false_value. For more information, see Data Type Precedence (Transact-SQL).

IIF is a shorthand way for writing a CASE expression. It evaluates the Boolean expression passed as the first argument, and then returns either of the other two arguments based on the result of the evaluation. That is, the true_value is returned if the Boolean expression is true, and the false_value is returned if the Boolean expression is false or unknown. true_value and false_value can be of any type. The same rules that apply to the CASE expression for Boolean expressions, null handling, and return types also apply to IIF. For more information, see CASE (Transact-SQL).

The fact that IIF is translated into CASE also has an impact on other aspects of the behavior of this function. Since CASE expressions can be nested only up to the level of 10, IIF statements can also be nested only up to the maximum level of 10. Also, IIF is remoted to other servers as a semantically equivalent CASE expression, with all the behaviors of a remoted CASE expression.

A. Simple IIF example

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

Here is the result set.


(1 row(s) affected)

B. IIF with NULL constants

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

The result of this statement is an error.

C. IIF with NULL parameters

SELECT IIF ( 45 > 30, @p, @s ) AS Result;

Here is the result set.


(1 row(s) affected)
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

© 2015 Microsoft