602SQL-Úplná dokumentace Index  

Příkaz UPDATE (SQL)

příkaz_UPDATE ::= UPDATE [schema.]jméno_tabulky SET jméno_sloupce = výraz 
    {, jméno_sloupce = výraz }… [WHERE podmínka]

Popis

Příkaz UPDATE (neboli Searched UPDATE) umožňuje hromadně změnit hodnoty sloupců v tabulce. Provedením příkazu se každému uvedenému sloupci přiřadí hodnota zadaná výrazem. Akce se provede s každým záznamem vyhovujícím podmínce, resp. se všemi záznamy v tabulce, pokud podmínka není uvedena. Počet dotčených záznamů je možné po provedení zjistit pomocí systémové proměnné @@ROWCOUNT.

Je-li tabulka prefixována jménem aplikace (na stejném serveru), tabulka se hledá v uvedené aplikaci (schématu).

Místo tabulky lze příkaz provádět i s editovatelným dotazem (VIEW) (toto se rozpozná již při překladu). Při tom se nekontroluje, zda měněné hodnoty odpovídají podmínce dotazu.

Příkaz UPDATE vyvolá UPDATE trigger pro každý měněný záznam. BEFORE UPDATE trigger se provede PŘED změnou záznamu, AFTER UPDATE trigger po změně. Dojde-li v triggeru k chybě, je obou případech příkaz UPDATE odvolán.

Je-li tabulka, na níž je příkaz UPDATE prováděn, nadřízenou tabulkou v aktivní referenční integritě (RI), mohou nastat dva případy:

Je-li tabulka, na níž je příkaz UPDATE prováděn, podřízenou tabulkou v RI a nové hodnoty porušují pravidlo RI, nastane chyba 40006 (REFERENTIAL_CONSTRAIN).

Uživatel, který přepisuje hodnoty sloupců v záznamech, musí mít k této činnosti dostatek efektivních práv.


Příklady použití:

Zvýšit všem zaměstnancům z oddělení plat o 10%:

UPDATE Zamestnan
SET plat = plat*1.1
WHERE oddeleni = 1

Je tabulka Cenik obsahující sloupce id a cena, dále je tabulka Katalog se sloupci id a nova_cena stejných typů. Úkolem je změnit hodnoty sloupce cena v tabulce Cenik podle odpovídajících hodnot v Katalog:

UPDATE Cenik
 SET cena = (SELECT nova_cena
             FROM Katalog
             WHERE Katalog.id=Cenik.id)
 WHERE EXISTS (SELECT nova_cena
               FROM Katalog
                WHERE Katalog.id=Cenik.id);

Viz