Příkaz UPDATE slouží ve SQL ke změně existujících záznamů v tabulce. Můžeme tak upravit 1 záznam, více záznamů nebo všechny. Podmínka, na základě které jsou ovlivněny záznamy, je umístěna ve WHERE klauzuli.
Syntaxe – 3 způsoby použítí UPDATE
A) Jednoduchá forma: Změna hodnot v určitém sloupci nebo sloupcích na základě podmínky
UPDATE dbo.Tabulka
SET <Sloupec 1 tabulky> = <Nová hodnota pro sloupec 1>,
<Sloupec 2 tabulky> = <Nová hodnota pro sloupec 2>
WHERE <Podmínka>;
B) S použitím JOINu: Změna hodnot na základě podmínky z jiné tabulky
UPDATE dbo.Tabulka_A
SET <Sloupec Tabulky_A> = <Nová hodnota pro sloupec Tabulky_A>
FROM dbo.Tabulka_A INNER JOIN dbo.dbo.Tabulka_B
ON dbo.Tabulka_A.ID = dbo.Tabulka_B.ID
WHERE <Podmínka na pole z Tabulky_B>;
C) S OUTPUT klauzulí: Pokud chceme logovat změny nad tabulkou. Výstup lze uložit do jiné tabulky (třeba jako záloha)
UPDATE dbo.Tabulka
SET <Sloupec Tabulky>= <Nová hodnota pro sloupec Tabulky>
OUTPUT inserted.<Sloupec Tabulky>, deleted.<Sloupec Tabulky>
WHERE <Podmínka>;
Output klauzule umožňuje jako výstup příkazu vyjet všechny změněné záznamy. Prefixem “inserted.” požadujeme nové hodnoty změněných záznamů a použitím prefixu “deleted.” dostaneme původní hodnoty záznamů (před updatem).
Pokud nepoužijeme klauzuli WHERE, dojde ke změnám nad celou tabulkou
Takovou specialitkou pro fajnšmekry je příkaz MERGE, o kterém jsem se rozepsal v článku SQL MERGE příkaz – INSERT, UPDATE, DELETE jedním vrzem.
Praktické příklady změny záznamů v tabulce s UPDATE
Příklad jednoduché formy změny tabulky
Nejjednodušším způsobem je záznamy v tabulce změnit napřímo (viz A). Pomocí SQL příkazu SET určíme novou hodnotu pro záznam/záznamy a v klauzuli WHERE podmínku.
Změna jednoho záznamu v tabulce:
UPDATE dbo.Platy
SET Plat = 150 000
WHERE Zamestnanec = 'Jan Zedníček';
Změna více záznamů v tabulce:
UPDATE dbo.Platy
SET Plat = 150 000
WHERE Zamestnanec IN ('Jan Zedníček','Franta Vomáčka');
UPDATE + FROM + JOIN
Další možností, jak změnu v tabulce udělat je změna tabulky s aplikací podmínky z jiné tabulky. Využijeme zejména tehdy, pokud potřebujeme změnit v relační databázi více záznamů, kde se kritérium pro změněné záznamy nachází v jiné tabulce, kterou si pro tyto účely najoinujeme.
V předchozí tabulce jsem si změnil plat na 150 000 Kč. Dejme tomu, že bych chtěl zvýšit plat všem lidem na pozici business intelligence developer o 10 000 Kč přičemž informace o pozici zaměstnantů se nacházi v tabulce dbo.PracovniPozice
UPDATE s použitím FROM
UPDATE dbo.Platy
SET dbo.Platy.Plat = dbo.Platy.Plat + 10 000
FROM dbo.PracovniPozice
WHERE dbo.PracovniPozice.ID_Pozice = dbo.Platy.ID_Pozice
AND dbo.PracovniPozice.ZamestnanecPozice = 'Business intelligence developer';
UPDATE s použitím FROM/INNER JOIN (více o joinech v článku SQL INNER JOIN)
UPDATE dbo.Platy
SET dbo.Platy.Plat = dbo.Platy.Plat + 10 000
FROM dbo.Platy INNER JOIN dbo.PracovniPozice
ON dbo.Platy.ID_Pozice = dbo.PracovniPozice.ID_Pozice
WHERE dbo.PracovniPozice.ZamestnanecPozice = 'Business intelligence developer';
UPDATE + OUTPUT klauzule
Mějme tabulku dbo.Platy, kde jsou 2 zaměstnanci: Franta Vomáčka s platem 5125 Kč a Jan Zedníček s platem 5000 Kč
Oběma zaměstnancům změníme plat na 20000 s výstupní sql klauzulí output:
UPDATE [Temp].[dbo].[Platy]
SET Plat = 20000
OUTPUT
inserted.ID_Pozice,
inserted.[Zamestnanec],
inserted.[Plat] AS Novy_Plat,
deleted.[Plat] AS Stary_Plat
WHERE 1=1