Studenti, kteří se učí nový programovací jazyk, často začínají svou první lekci s IF
příkaz, kde jejich příkaz vrátí hodnotu pouze v případě, že je výraz pravdivý.
Poté mohou postoupit do IF... ELSE
příkaz, kde mohou určit jinou hodnotu, která se má vrátit, pokud je výraz nepravdivý. Proto vraťte jednu hodnotu, pokud je výraz pravdivý, a jinou hodnotu, pokud je nepravda.
SQL Server jistě obsahuje IF... ELSE
ve svém T-SQL toolboxu.
SQL Server také obsahuje IIF()
funkce, která dělá podobnou věc, ale se stručnější syntaxí.
Ale je tu několik jemných rozdílů.
Rozdíly
Následující tabulka uvádí hlavní rozdíly mezi IF
a IIF()
funkce.
IF | IIF() | |
---|---|---|
Typ | Prohlášení o řízení toku. | Logická funkce. |
Jak se určí výsledek? | Zadáte příkaz SQL nebo blok příkazů, který se má provést. | Zadáte skutečnou hodnotu, která se má vrátit. |
Vnoření? | Omezení počtu vnořených úrovní závisí na dostupné paměti. | Lze vnořit pouze do maximální úrovně 10. |
Co když výraz vrátí hodnotu false? | ELSE klíčové slovo je volitelné (tj. můžete si vybrat, zda chcete či nechcete zohledňovat falešné výsledky). | Vyžaduje hodnotu true i false (tj. musíte zohlednit falešné výsledky). |
IIF()
Funkce je ve skutečnosti zkrácený způsob psaní CASE
výraz. Sdílí tedy stejná omezení jako CASE
výraz, které se liší od IF
prohlášení.
Prohlášení IF
Zde je IF
prohlášení.
IF 1 < 2 SELECT 'True';
Výsledek:
True
V tomto případě je výraz k vyhodnocení 1 < 2
. Je pravda, že 1 je menší než 2, takže SELECT
příkaz byl spuštěn a True
byl vrácen.
Pokud je však výraz nepravdivý, nic se nestane.
IF 1 > 2 SELECT 'True';
Výsledek:
Commands completed successfully.
Vše, co mi SQL Server řekl, je, že příkaz byl úspěšně dokončen. Nic jiného nebylo vráceno, protože nebylo uvedeno nic jiného.
Prohlášení IF… ELSE
V tomto případě můžeme přidat volitelný ELSE
do IF
příkaz, takže se stane IF... ELSE
prohlášení.
IF 1 > 2
SELECT 'True';
ELSE
SELECT 'False';
Výsledek:
False
Nyní také dostaneme výsledek, když je výraz nepravdivý.
Funkce IIF()
IIF()
Funkce nám umožňuje napsat stejnou logiku pomocí stručnější syntaxe.
Mohli bychom tedy přepsat předchozí příklad na následující:
SELECT IIF( 1 > 2, 'True', 'False' );
Výsledek:
False
IIF()
Funkce je v podstatě stručnější způsob, jak provést IF... ELSE
prohlášení.
Ve skutečnosti je to pravda jen částečně. Jak již bylo zmíněno, IIF()
funkce je založena na CASE
výraz, a proto má stejná omezení jako CASE
výraz (jako například schopnost vnořit se pouze do maximální úrovně 10).
Proto je předchozí příkaz ekvivalentem následujícímu.
SELECT
CASE WHEN 1 > 2 THEN 'True'
ELSE 'False'
END;
Výsledek:
False
Všimněte si, že IIF()
vyžaduje dva argumenty, a proto musíte zadat hodnotu, která se má vrátit, pokud je výsledkem výrazu nepravda (i když zadáte NULL
nebo prázdný řetězec).