Trigger je speciální typ uložené procedury a má základní rozdělení:

  • DML trigger → jsou prováděny automaticky v odpovědi na DML události (insert update delete) nad tabulkou nebo view

  • DDL trigger → spouští se při: create, drop, alter, grant, deny, revoke opercích

  • Log on trigger → spouští se při vytvoření uživatelské session

DML trigger

Vytvořte trigger, který při zápisu nového záznamu do tabulky zapíše do logu určité informace:

create trigger tr_novyZaznamOsoby on osoby 
after insert
AS 
begin
	declare @prijmeni NVARCHAR(30),@id_vloz Int
	select @prijmeni = prijmeni, @id_vloz = insterted.id from inserted
	insert into log (datum, atrib1, atrib2, atrib3, atrib4)
	values(getdate(), 'vložení', @prijmeni, @id_vloz,' ');
	end

triggery bývají obvykle volány buď:

  • před specifikovanou událostí → before

  • po specifikované události → after

V rámci jednoho triggeru existují dvě pseudo tabulky, které zpřístupňují nová a stará data (inserted, deleted).

V rámci triggeru lze pomocí rollback zrušit operaci, která trigger spustila.

Jeden trigger lze použít pro více akcí najednou.

UPOZORNĚNÍ: Pokud jsou nadměrně používány mohou potenciálně vést k problémům s výkonem jako je blokování, a pokud nejsou správně napsány mohou se ztratit data