SQL Server har en unik förmåga att tillåta dig att exekvera programmatisk logik i realtid på värdena i din fråga. Baserat på dessa logiska utvärderingar kan du generera olika värden som en del av den returnerade datamängden.
Använda CASE-utlåtandet
Detta görs enklast i alla versioner av SQL Server med CASE sats, som fungerar som en logisk IF...THEN...ELSE uttryck och returnerar olika värden beroende på resultatet.
I det här exemplet nedan vill vi returnera ytterligare en locale kolumn som anger om vår bok utspelar sig i Midgård eller vanliga gamla jorden.
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
Innan vi undersöker det speciella CASE aspekt av detta uttalande, låt oss tillfälligt ta bort CASE att lägga märke till att detta är en extremt enkel SELECT uttalande på ytan:
SELECT
books.*
FROM
books
Låt oss därför undersöka hur CASE avsnittet är strukturerat och vilket logiskt beteende vi utför.
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale
Till att börja med initialiserar vi CASE ange sedan under vilka villkor (WHEN ) vårt CASE uttalande bör utvärdera ett resultat. I det här exemplet undersöker vi books.title och books.primary_author; om någon av dem passar vårt Tolkien-liknande tema, THEN vi returnerar värdet 'Middle-earth'. Om inget av fälten matchar vår sökning returnerar vi istället värdet på 'Earth'.
Att ordna om logiken som en pseudo-kod IF...THEN...ELSE uttalande, ber vi helt enkelt SQL att utvärdera:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Slutligen är det viktigt att komma ihåg att ett CASE sats måste alltid läggas till i slutet med en matchande END påstående. I exemplet ovan döper vi också om det resulterande värdet som returneras till locale , även om det verkligen är valfritt.
Använda IIF-funktionen
Om du använder en modernare version av SQL är det bra att veta att SQL Server 2012 introducerade den mycket praktiska IIF fungera. IIF är en förkortningsmetod för att utföra en IF...ELSE /CASE uttalande och returnera ett av två värden, beroende på utvärderingen av resultatet.
Omstrukturerar vårt exempel ovan för att använda IIF är ganska enkelt.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
Med en IIF funktion ersätter vi till stor del mycket av det syntaktiska sockret från CASE uttalande med några enkla kommatecken för att skilja våra argument åt.
Allt sagt, båda CASE och IIF få samma jobb gjort, men om du får välja IIF kommer i allmänhet att vara mycket enklare att använda.