SQL Server има уникална способност да ви позволи да изпълнявате програмна логика в реално време върху стойностите във вашата заявка. Въз основа на тези логически оценки можете да генерирате различни стойности като част от върнатия набор от данни.
Използване на оператора CASE
Това се постига най-лесно във всички версии на SQL Server с помощта на CASE оператор, който действа като логически IF...THEN...ELSE израз и връща различни стойности в зависимост от резултата.
В този пример по-долу искаме да върнем допълнителен locale колона, която посочва дали действието на нашата книга се развива в Средната земя или обикновената стара Земя.
SELECT
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale,
books.*
FROM
books
Преди да разгледаме специалния CASE аспект на това изявление, нека временно премахнем CASE за да забележите, че това е изключително прост SELECT изявление на повърхността:
SELECT
books.*
FROM
books
Затова нека разгледаме как CASE секцията е структурирана и какво логическо поведение изпълняваме.
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale
За да започнем, ние инициализираме CASE след това посочете при какви условия (WHEN ) нашия CASE изявлението трябва да оцени резултата. В този пример разглеждаме books.title и books.primary_author; ако някое от тях отговаря на нашата тема в стил Толкин, THEN връщаме стойността „Средната земя“. Ако нито едно поле не отговаря на нашето търсене, вместо това връщаме стойността на „Земя“.
За да пренаредите логиката като псевдокод IF...THEN...ELSE изявление, ние просто молим SQL да оцени:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
И накрая, важно е да запомните, че CASE изявлението винаги трябва да се добавя в края със съответстващ END изявление. В горния пример ние също преименуваме получената стойност, която се връща на locale , въпреки че това със сигурност не е задължително.
Използване на функцията IIF
Ако използвате по-модерна версия на SQL, полезно е да знаете, че SQL Server 2012 представи много удобния IIF функция. IIF е съкратен метод за изпълнение на IF...ELSE /CASE оператор и връщане на една от двете стойности, в зависимост от оценката на резултата.
Преструктуриране на горния пример за използване на IIF е доста проста.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
С IIF функция, ние до голяма степен заместваме голяма част от синтактичната захар от CASE изявление с няколко прости разделители със запетая, за да разграничим нашите аргументи.
Всичко казано, и двата CASE и IIF свършите същата работа, но ако имате избор, IIF обикновено ще бъде много по-лесно за използване.