SQL triger on spetsiaalne andmebaasi objekt, mis käivitab automaatselt teatud sündmus (nt INSERT, UPDATE, DELETE). Trigerid aitavad automatiseerida protsessid andmebaasis
SQL Server.
- loome andmebaasi ja kaks tabelit. 1. tabel kuhu kasutaja sisestab andmeid (linnad). 2. tabel – logi, kus triger lisab jälgitud andmeid.
create database trigerTimoha
use trigerTimoha
create table linnad(
linnId int primary key identity(1,1),
linnanimi varchar(50) unique,
rahvaarv int not null);
--tabel logi
CREATE TABLE logi(
Id int primary key identity(1,1),
kuupaev datetime,
andmed TEXT);

2. trigeri loomine.
INSERT TRIGER, mis jalgib andmete lisamine tabelisse linnad.
Create TRIGGER linnaLisamine
on linnad
for insert
As
insert into logi(kuupaev, andmed)
Select
getdate(), inserted.linnanimi
from inserted;
--kontrllimiseks tuleb lisada uus linn tabelisse
insert into linnad (linnanimi, rahvaarv)
values('Narva', 50000);
Select * from linnad;
Select * from logi;

--kustutame triger
drop trigger linnaLisamine;
Create TRIGGER linnaLisamine
on linnad
for insert
As
insert into logi(kuupaev, andmed)
Select
getdate(),
CONCAT ('lisarud linn: ', inserted.linnanimi,
' | rahvaarv: ', inserted.rahvaarv, ' id: ', inserted.linnId)
from inserted;
--delete trigger
Create TRIGGER linnakustutamine
on linnad
for delete
As
insert into logi(kuupaev, andmed)
Select
getdate(),
CONCAT ('kustutatud linn: ', deleted.linnanimi,
' | rahvaarv: ', deleted.rahvaarv, ' id: ', deleted.linnId)
from deleted ;
delete from linnad where linnId=1;
Select * from linnad;
Select * from logi;

CREATE TRIGGER linnaUuendamine
on linnad
For update
as
insert into logi(kuupaev, andmed)
select
GETDATE(),
CONCAT (' vana linna andmed: ', d.linnanimi,
' | ', d.rahvaarv, ' | id: ', d.linnId,
' vana linna andmed: ', i.linnanimi,
' | ', i.rahvaarv, ' | id: ', i.linnId)
from deleted d inner join inserted i
on d.linnId=i.linnId
--kontrollimiseks uuendame linna andmed
select * from linnad
UPDATE linnad Set linnanimi = 'Tapa uus', rahvaarv= 25
Where linnId=2;
select * from linnad;
select * from logi;
--lisame kasutajanimi logi tabelisse
Alter table logi add kasutaja varchar(40);
--INSERT, DELETE Trigger
Create TRIGGER linnaLisamineKustutamine
on linnad
for insert, DELETE
As
begin
SET NOCOUNT ON;
insert into logi(kuupaev, andmed, kasutaja)
Select
getdate(),
CONCAT ('lisarud linn: ', inserted.linnanimi,
' | rahvaarv: ', inserted.rahvaarv, ' id: ', inserted.linnId),
SYSTEM_USER
from inserted
UNION ALL
SELECT
getdate(),
CONCAT ('kustutatud linn: ', deleted.linnanimi,
' | rahvaarv: ', deleted.rahvaarv, ' id: ', deleted.linnId),
SYSTEM_USER
from deleted ;
end;
DiSABle TRIGGER linnaLisamine on linnad;
DISABLE TRIGGER linnaLkustutamine ON linnad;
insert into linnad (linnanimi, rahvaarv)
values('Paldiski', 50000);
Delete from linnad Where linnId=5
select * from linnad
Select * from logi
