Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server IF срещу IIF():Каква е разликата?

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на съставен първичен ключ в SQL Server

  2. Намерете понеделници между 2 дати

  3. Вмъкване на резултати от съхранена процедура във временна таблица

  4. Какво означава exec sp_reset_connection в Sql Server Profiler?

  5. Типове курсори на SQL Server - Статичен курсор само за препращане | Урок за SQL Server / Урок за TSQL