Sdílet prostřednictvím


Logické funkce - IIF (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Vrací jednu ze dvou hodnot, v závislosti na tom, zda se Booleovský výraz v SQL Serveru vyhodnocuje jako pravda nebo nepravda.

Transact-SQL konvence syntaxe

Syntaxe

IIF( boolean_expression, true_value, false_value )

Arguments

boolean_expression

Platný Booleovský výraz.

Pokud tento argument není booleovským výrazem, vzniká syntaktická chyba.

true_value

Hodnota k vrácení, pokud boolean_expression vyhodnotí jako pravda.

false_value

Hodnota k vrácení, pokud boolean_expression vyhodnocuje jako nepravdivá.

Návratové typy

Vrátí datový typ s nejvyšší předností z typů v true_value a false_value. Další informace naleznete v tématu priorita datových typů (Transact-SQL).

Poznámky

IIF je zkratka pro zápis výrazu CASE. Vyhodnotí Booleovský výraz přijatý jako první argument a poté vrátí jeden z dalších dvou argumentů na základě výsledku vyhodnocení. To znamená, že true_value se vrátí, pokud je Booleovský výraz pravdivý, a false_value se vrátí, pokud je Booleovský výraz nepravdivý nebo neznámý. true_value a false_value mohou být jakéhokoliv typu. Stejná pravidla, která platí pro CASE výraz pro Booleovské výrazy, zpracování nullů a typy returnů, platí i pro IIF. Pro více informací viz CASE (Transact-SQL).

Fakt, že je IIF přeložen do CASE, má také vliv na další aspekty chování této funkce. Protože CASE výrazy lze vnořit pouze do úrovně 10, mohou být vnořeny i příkazy IIF pouze do maximální úrovně 10. IIF je také vzdáleně přenášen na jiné servery jako sémanticky ekvivalentní CASE výraz, se všemi chováními vzdáleného CASE výrazu.

IIF není podporován v dedikovaných SQL poolech v Azure Synapse Analytics.

Examples

A. Jednoduchý příklad IIF

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

Tady je soubor výsledků.

Result  
--------  
TRUE  

B. IIF s nulovými konstantami

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

Výsledkem tohoto tvrzení je chyba.

C. IIF s nulovými parametry

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

Tady je soubor výsledků.

Result  
--------  
NULL  

Další kroky