SQL Server 2012 wprowadził nową wbudowaną funkcję logiczną SQL IIF. Jest to skrótowa forma zapisu logiki CASE lub IF-ELSE.

omówiliśmy Case Statement w SQL w moim wcześniejszym artykule. Używamy instrukcji case, aby zwrócić wynik na podstawie zdefiniowanego warunku. Jest podobny do IF..ELSE … wtedy polecenie oblicza wyrażenie i zwraca wynik. Instrukcja case jest dostępna w prawie wszystkich wersjach SQL Server.

przyjrzyjmy się tej funkcji SQL IIF w tym artykule.,

przegląd instrukcji SQL IIF

używamy następującego formatu do zapisu logiki instrukcji Case w zapytaniach SQL

SELECT CASE Expression When expression1 Then Result1 When expression2 Then Result2 … ELSE Result END

możemy napisać ten kod używając składni instrukcji SQL IIF w następujący sposób.

IIF(boolean_expression, true_value, false_value)

  • Boolean_expression: pierwszy parametr w instrukcji SQL IIF jest wyrażeniem logicznym., Powinno to być poprawne wyrażenie logiczne w przeciwnym razie otrzymamy wyjątek
  • True_Value: jeśli wyrażenie logiczne jest prawdziwe, Zwraca wartość określoną w parametrze true_value
  • False_Value: jeśli wyrażenie logiczne jest fałszywe, Zwraca wartość określoną w parametrze false_value

zbadajmy instrukcję SQL IIF używając przykładów.

przykład 1: polecenie SQL IIF do porównywania wartości całkowitych

w poniższym przykładzie podane wyrażenie logiczne zwraca False (2> 3 nie jest prawdą)., Due to this, it returns the value specified in the false_value parameter.

1
SELECT IIF(2 > 3, 'TRUE', 'FALSE' )

Similarly, if the condition is TRUE (5>3 is TRUE) so it returns the value of true_value parameter.,

1
SELECT IIF(5 > 3, 'TRUE', 'FALSE' )

Example 2: SQL IIF statement with variables

In the following example, we specified two integer variables and assigned values. We use variables for comparison in the IIF statement.,

1
2

DECLARE @A INT = 80, @B INT = 70
SELECT IIF(@A >= @B, 'PASS', 'FAIL' )

The specified condition (80>70) is TRUE, so it returns the value PASS.,

przykład 3: polecenie SQL IIF aby porównać dwa ciągi znaków

w poniższym przykładzie chcemy porównać dane ciągów za pomocą polecenia SQL IIF. Chcemy poznać osobę lubiącą na podstawie nazwy osoby.,

1
2

DECLARE @Person Varchar(100) = 'Raj'
SELECT IIF(@Person=’Raj',’Likes Apple',’NA')

We can specify multiple conditions in SQL IIF statement as well.,i>

  • Else all other persons like orange
  • 1
    2

    DECLARE @Person Varchar(100) = 'Raj'
    SELECT IIF(@Person in(’Raj', 'Mohan'),’Likes Apple',’Likes Orange')

    The query should return Likes Orange if the person name is not in the IN clause., W poniższym przykładzie person Vinay nie istnieje w zmiennej @ Person, więc zwraca wartość dla klauzuli false.

    przykład 4: zagnieżdżone polecenie SQL IIF

    możemy również użyć zagnieżdżonego polecenia SQL IIF do określenia wielu warunków

    w tej funkcji SQL IIF sprawdza on pierwszy warunek i jeśli warunek jest prawdziwy, Zwraca wartość. W naszym przypadku jest to FALSE (osoba Vinay nie pasuje do Raja). sprawdza drugi warunek i zwraca wyniki, jeśli jest prawdziwy.,

    Jeśli żaden z warunków nie jest prawdziwy, zwraca domyślną wiadomość false.

    przykład 5: polecenie SQL IIF z kolumną tabeli

    w poprzednich przykładach określamy wartości bezpośrednio w instrukcji IIF lub określone dla niej zmienne. Zazwyczaj chcemy go używać z istniejącymi danymi w tabeli SQL. Możemy również użyć instrukcji IIF z kolumną tabeli.,

    w poniższym przykładzie chcemy poznać nazwę dostawcy z tabeli PurchaseOrders w bazie danych WideWorldImporters.

    Jeśli nazwa dostawcy nie istnieje dla określonego identyfikatora dostawcy, zwraca podaną wartość false w instrukcji SQL IIF.

    przykład 6: polecenie SQL IIF z kolumną tabeli i funkcją agregującą

    przykład 7: polecenie SQL IIF i typ danych pierwszeństwo

    możemy mieć różne typy danych dla wyników., Jeśli mamy różne typy danych określone w Warunkach wynikowych, to SQL Server daje najwyższy priorytetowy typ danych. W poniższym przykładzie dla warunku false (11>19) wynikiem będzie argument false_value, tzn. 100. Powinna być typu danych e integer, ale otrzymujemy wyjście 40.0, ponieważ drugi argument float (2.6) ma wysoki priorytet niż liczba całkowita.,

    1
    SELECT IIF(11 > 19, 2.6, 40)

    You can check the data type precedence in the following image

    Example 8: SQL IIF with NULL values

    We should be careful in NULL values inside the SQL IIF function.,

    1
    2
    3

    SELECT
    IIF(100 > 99, NULL, NULL) AS Result;

    We cannot specify NULL in both the true and false arguments. We get the following error message.,

    Msg 8133, Level 16, State 1, Line 1 przynajmniej jedno z wyrażeń wynikowych w specyfikacji przypadku musi być wyrażeniem innym niż stała NULL.

    w komunikacie o błędzie widać, że podaje on informacje o specyfikacji przypadku, jednak użyliśmy funkcji SQL IIF. Przyjrzymy się temu w następnym przykładzie.

    powinieneś podać przynajmniej jeden z argumentów true lub false.,

    1
    2

    SELECT
    IIF(100 > 99, 'Hello', NULL) AS Result;

    The similarity between SQL IIF statement and CASE Statement

    In the introduction of SQL IIF Statement, we mentioned that it is a shorthand form of writing CASE statement logic or IF-ELSE logic., Tak, to prawda. Wewnętrznie SQL Server konwertuje instrukcję na instrukcję CASE i wykonuje ją. Możemy to sprawdzić za pomocą rzeczywistego planu wykonania zapytania.

    wykonaj zapytanie z przykładu 6 z rzeczywistym planem wykonania.

    w rzeczywistym planie wykonania spójrz na właściwości Skalaru obliczeniowego. Możesz zobaczyć, że wykonuje polecenie CASE wewnętrznie.

    wnioski

    w tym artykule zbadaliśmy instrukcję SQL IIF, która jest nowym sposobem pisania warunków związanych z CASE statement., Jest on dostępny od SQL 2012 począwszy. Powinieneś to zbadać, aby się z tym zapoznać. Jeśli masz jakieś uwagi lub pytania, zostaw je w komentarzach poniżej.,

    • Autor
    • Ostatnie posty
    jako MCSA certified i Microsoft Certified Trainer w Gurgaon, Indie, z 13-letnim doświadczeniem, Rajendra pracuje dla wielu dużych firm koncentrując się na optymalizacji wydajności, monitorowania, wysokiej dostępności i strategii odzyskiwania po awarii i wdrożenia., Jest autorem setek autorytatywnych artykułów na temat SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS/Amazon RDS, Git i pokrewnych technologii, które do tej pory obejrzało ponad 10 milionów czytelników.
    jest twórcą jednego z największych darmowych internetowych zbiorów artykułów na jeden temat, z jego 50-częściową serią na SQL Server Always On Availability Groups. W oparciu o swój wkład w społeczność SQL Server został wyróżniony różnymi nagrodami, w tym prestiżowym „najlepszym autorem roku” nieprzerwanie w 2020 i 2021 w sqlshack.,
    Raj jest zawsze zainteresowany nowymi wyzwaniami, więc jeśli potrzebujesz pomocy Konsultacyjnej na dowolny temat poruszany w jego pismach, można do niego dotrzeć w rajendra.gupta16@gmail.,com
    Zobacz wszystkie posty Rajendra Gupta

    najnowsze posty Rajendra Gupta (Zobacz wszystkie)
    • Wykonywanie mniejszych i większych aktualizacji wersji dla AWS RDS SQL Server – 29 stycznia 2021
    • wdrażanie instancji AWS RDS PostgreSQL – 27 stycznia 2021
    • migracja lokalnych baz danych SQL do AWS RDS SQL Server za pomocą AWS DMS-25 stycznia 2021

    Dodaj komentarz

    Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *