Учениците, изучаващи нов език за програмиране, често започват първия си урок с IF
изявление, където тяхното изявление ще върне стойност само ако изразът е вярно.
След това те могат да преминат към IF... ELSE
оператор, където те могат да определят друга стойност, която да върне, ако изразът е фалшив. Следователно, върнете една стойност, ако изразът е вярно, и друга стойност, ако е false.
SQL Server със сигурност включва IF... ELSE
изявление в неговата кутия с инструменти T-SQL.
SQL Server включва също IIF()
функция, която прави подобно нещо, но с по-сбит синтаксис.
Но има някои фини разлики.
Разликите
Следващата таблица очертава основните разлики между IF
оператор и IIF()
функция.
IF | IIF() | |
---|---|---|
Тип | Изявление за управление на потока. | Логическа функция. |
Как се определя резултатът? | Посочвате SQL израз или блок на инструкция за изпълнение. | Посочвате действителната стойност за връщане. |
Вложени? | Ограничението за броя на вложените нива зависи от наличната памет. | Може да бъде вложен само до максимално ниво от 10. |
Ами ако изразът върне false? | ELSE ключовата дума е по избор (т.е. можете да изберете дали да се погрижите за неверни резултати). | Изисква както вярна, така и фалшива стойност (т.е. трябва да се погрижите за неверни резултати). |
IIF()
функцията всъщност е съкратен начин за писане на CASE
изразяване. Следователно той споделя същите ограничения като CASE
израз, които са различни от IF
изявление.
Изявлението IF
Ето IF
изявление.
IF 1 < 2 SELECT 'True';
Резултат:
True
В този случай изразът за оценка е 1 < 2
. Вярно е, че 1 е по-малко от 2, така че SELECT
операторът беше изпълнен и True
беше върнат.
Ако обаче изразът е фалшив, нищо няма да се случи.
IF 1 > 2 SELECT 'True';
Резултат:
Commands completed successfully.
Всичко, което SQL Server ми каза, е, че командата е завършена успешно. Нищо друго не беше върнато, защото нищо друго не беше посочено.
Изявлението IF... ELSE
В този случай можем да добавим незадължителния ELSE
към IF
израз, така че да стане IF... ELSE
изявление.
IF 1 > 2
SELECT 'True';
ELSE
SELECT 'False';
Резултат:
False
Сега получаваме и резултат, когато изразът е фалшив.
Функция IIF()
IIF()
функцията ни позволява да напишем същата логика, използвайки по-сбит синтаксис.
Следователно бихме могли да пренапишем предишния пример на следното:
SELECT IIF( 1 > 2, 'True', 'False' );
Резултат:
False
IIF()
функцията е основно по-сбит начин за извършване на IF... ELSE
изявление.
Всъщност, това е само частично вярно. Както споменахме, IIF()
функцията е базирана на CASE
израз и следователно има същите ограничения като CASE
израз (като например възможност за влагане само до максимално ниво от 10).
Следователно предишното твърдение е еквивалентно на следното.
SELECT
CASE WHEN 1 > 2 THEN 'True'
ELSE 'False'
END;
Резултат:
False
Обърнете внимание, че IIF()
изисква два аргумента и следователно от вас се изисква да посочите стойност, която да върнете, ако изразът доведе до false (дори ако посочите NULL
или празен низ).