SQL Server má jedinečnou schopnost vám umožnit spouštět programovou logiku v reálném čase na hodnotách v dotazu. Na základě těchto logických vyhodnocení můžete generovat různé hodnoty jako součást vrácené datové sady.
Použití příkazu CASE
Toho lze nejsnáze provést ve všech verzích SQL Server pomocí CASE
příkaz, který funguje jako logický IF...THEN...ELSE
výraz a vrací různé hodnoty v závislosti na výsledku.
V tomto příkladu níže chceme vrátit další locale
sloupec, který udává, zda se naše kniha odehrává ve Středozemi nebo na běžné staré Zemi.
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
Než prozkoumáme speciální CASE
aspekt tohoto prohlášení, dočasně odstraňte CASE
abyste si všimli, že se jedná o extrémně jednoduchý SELECT
prohlášení na povrchu:
SELECT
books.*
FROM
books
Proto se podívejme, jak CASE
sekce je strukturovaná a jaké logické chování provádíme.
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale
Pro začátek inicializujeme CASE
poté určete, za jakých podmínek (WHEN
) náš CASE
prohlášení by mělo vyhodnotit výsledek. V tomto příkladu zkoumáme books.title
a books.primary_author
; pokud některá vyhovuje našemu tématu ve stylu Tolkiena, THEN
vrátíme hodnotu ‚Middle-earth.‘ Pokud ani jedno pole neodpovídá našemu vyhledávání, vrátíme místo toho hodnotu ‚Earth‘.
Chcete-li změnit uspořádání logiky jako pseudokód IF...THEN...ELSE
příkazu, jednoduše žádáme SQL, aby vyhodnotil:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Nakonec je důležité si uvědomit, že CASE
příkaz musí být vždy připojen na konec s odpovídajícím END
prohlášení. Ve výše uvedeném příkladu také přejmenujeme výslednou hodnotu, která se vrátí na locale
, i když je to určitě volitelné.
Použití funkce IIF
Pokud používáte modernější verzi SQL, je užitečné vědět, že SQL Server 2012 představil velmi praktický IIF
funkce. IIF
je zkrácená metoda pro provedení IF...ELSE
/CASE
a vrátí jednu ze dvou hodnot v závislosti na vyhodnocení výsledku.
Restrukturalizace našeho výše uvedeného příkladu na použití IIF
je docela jednoduché.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
S IIF
Z velké části nahrazujeme mnoho syntaktického cukru z CASE
prohlášení s několika jednoduchými čárkami pro odlišení našich argumentů.
Vše řečeno, oba CASE
a IIF
udělat stejnou práci, ale pokud máte na výběr, IIF
bude obecně mnohem jednodušší.