sql >> Databáze >  >> RDS >> Sqlserver

SQL Server IF vs IIF():Jaký je rozdíl?

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


  1. Jaký je nejlepší způsob, jak vytvořit a naplnit číselnou tabulku?

  2. SQL Server 2008 oddělovač tisíců pro sloupec

  3. Nasazení serveru Percona do hybridního cloudu

  4. Který datový typ .NET je nejlepší pro mapování NUMBER datového typu Oracle v NHibernate?