Logiska funktioner - IIF (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Returnerar ett av två värden, beroende på om det booleska uttrycket utvärderas till sant eller falskt i SQL Server.

Transact-SQL syntaxkonventioner

Syntax

IIF( boolean_expression, true_value, false_value )

Arguments

boolean_expression

Ett giltigt booleskt uttryck.

Om detta argument inte är ett boolesk uttryck uppstår ett syntaxfel.

true_value

Värde att returnera om boolean_expression utvärderas till sant.

false_value

Värde att returnera om boolean_expression utvärderas till falskt.

Returtyper

Returnerar datatypen med högst prioritet bland typerna i true_value och false_value. Mer information finns i Data Type Precedence (Transact-SQL).

Anmärkningar

IIF är ett förkortat sätt att skriva ett CASE-uttryck. Den utvärderar det booleska uttrycket som passerades som det första argumentet, och returnerar sedan något av de andra två argumenten baserat på resultatet av utvärderingen. Det vill säga, true_value returneras om det booleska uttrycket är sant, och false_value returneras om det booleska uttrycket är falskt eller okänt. true_value och false_value kan vara av vilken typ som helst. Samma regler som gäller för CASE-uttrycket för boolesk uttryck, nullhantering och returtyper gäller också för IIF. För mer information, se CASE (Transact-SQL).

Det faktum att IIF översätts till CASE påverkar också andra aspekter av funktionens beteende. Eftersom CASE-uttryck endast kan nästlas upp till nivån 10, kan IIF-satser också nästlas endast upp till maximal nivå 10. Dessutom fjärrstyrs IIF till andra servrar som ett semantiskt ekvivalent CASE-uttryck, med alla beteenden som ett fjärrstyrt CASE-uttryck.

IIF stöds inte i dedikerade SQL-pooler i Azure Synapse Analytics.

Examples

A. Enkelt exempel på IIF

DECLARE @a INT = 45, @b INT = 40;
SELECT [Result] = IIF( @a > @b, 'TRUE', 'FALSE' );

Här är resultatet.

Result  
--------  
TRUE  

B. IIF med NULL-konstanter

SELECT [Result] = IIF( 45 > 30, NULL, NULL );

Resultatet av detta påstående är ett fel.

C. IIF med NULL-parametrar

DECLARE @P INT = NULL, @S INT = NULL;  
SELECT [Result] = IIF( 45 > 30, @P, @S );

Här är resultatet.

Result  
--------  
NULL  

Nästa steg