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