Учениците, изучаващи нов език за програмиране, често започват първия си урок с 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 или празен низ).