Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server IF a IIF():jaka jest różnica?

Uczniowie uczący się nowego języka programowania często zaczynają swoją pierwszą lekcję od IF oświadczenie, gdzie ich instrukcja zwróci wartość tylko wtedy, gdy wyrażenie jest prawdziwe.

Mogą wtedy przejść do IF... ELSE oświadczenie, w którym mogą określić inną wartość do zwrócenia, jeśli wyrażenie jest fałszywe. Dlatego zwróć jedną wartość, jeśli wyrażenie jest prawdziwe, a drugą, jeśli jest fałszywe.

SQL Server z pewnością zawiera IF... ELSE w swoim zestawie narzędzi T-SQL.

SQL Server zawiera również funkcję IIF() funkcja, która robi podobną rzecz, ale z bardziej zwięzłą składnią.

Ale są pewne subtelne różnice.

Różnice

Poniższa tabela przedstawia główne różnice między IF oświadczenie i IIF() funkcja.

IF IIF()
Typ Oświadczenie kontroli przepływu. Funkcja logiczna.
Jak określany jest wynik? Określasz instrukcję SQL lub blok instrukcji do wykonania. Określasz rzeczywistą wartość do zwrócenia.
Zagnieżdżanie? Ograniczenie liczby zagnieżdżonych poziomów zależy od dostępnej pamięci. Może być zagnieżdżony tylko do maksymalnego poziomu 10.
Co się stanie, jeśli wyrażenie zwróci fałsz? ELSE słowo kluczowe jest opcjonalne (tj. możesz wybrać, czy uwzględnić fałszywe wyniki). Wymaga zarówno prawdziwej, jak i fałszywej wartości (tj. musisz zadbać o fałszywe wyniki).

IIF() funkcja jest w rzeczywistości skróconym sposobem na napisanie CASE wyrażenie. W związku z tym ma te same ograniczenia co CASE wyrażenie, które jest inne niż IF oświadczenie.

Oświadczenie IF

Oto IF oświadczenie.

IF 1 < 2 SELECT 'True';

Wynik:

True

W tym przypadku wyrażenie do oceny to 1 < 2 . Prawdą jest, że 1 jest mniejsze niż 2, więc SELECT instrukcja została uruchomiona i True został zwrócony.

Jeśli jednak wyrażenie jest fałszywe, nic się nie stanie.

IF 1 > 2 SELECT 'True';

Wynik:

Commands completed successfully.

Wszystko, co powiedział mi SQL Server, to to, że polecenie zostało pomyślnie zakończone. Nic innego nie zostało zwrócone, ponieważ nic innego nie zostało określone.

Oświadczenie IF… ELSE

W takim przypadku możemy dodać opcjonalny ELSE do IF oświadczenie, tak aby stało się IF... ELSE oświadczenie.

IF 1 > 2
       SELECT 'True';
ELSE 
       SELECT 'False';

Wynik:

False

Teraz otrzymujemy również wynik, gdy wyrażenie jest fałszywe.

Funkcja IIF()

IIF() funkcja pozwala nam napisać tę samą logikę przy użyciu bardziej zwięzłej składni.

Moglibyśmy zatem przepisać poprzedni przykład w następujący sposób:

SELECT IIF( 1 > 2, 'True', 'False' );

Wynik:

False

IIF() funkcja jest zasadniczo bardziej zwięzłym sposobem wykonywania IF... ELSE oświadczenie.

Właściwie to tylko częściowo prawda. Jak wspomniano, IIF() funkcja jest oparta na CASE wyrażenie i dlatego ma te same ograniczenia co CASE wyrażenie (takie jak możliwość zagnieżdżenia tylko do maksymalnego poziomu 10).

Dlatego poprzednie stwierdzenie jest odpowiednikiem następującego.

SELECT 
  CASE WHEN 1 > 2 THEN 'True'
    ELSE 'False'
  END;

Wynik:

False

Zauważ, że IIF() wymaga dwóch argumentów i dlatego musisz określić wartość do zwrócenia, jeśli wyrażenie ma wartość false (nawet jeśli określisz NULL lub pusty ciąg).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL Server w celu znalezienia wszystkich uprawnień/dostępu dla wszystkich użytkowników w bazie danych

  2. Wykonaj duży skrypt SQL (za pomocą poleceń GO)

  3. Jak zmienić domyślną bazę danych w SQL Server bez użycia MS SQL Server Management Studio?

  4. Użyj NEWSEQUENTIALID(), aby utworzyć przyrostowy identyfikator GUID w SQL Server

  5. Jak uzyskać wszystkie tabele z lub bez ograniczenia klucza podstawowego w bazie danych serwera SQL — samouczek SQL Server / TSQL 59