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).