A Transact SQL programozási nyelv

Triggerek

Triggerek alkalmazása

Instead of trigger



A kiváltó utasítás helyett fut le.

After trigger



A kiváltó utasítás után fut le.
Insert, update, delete

Trigger-ekben használhatóak az inserted, updated virtuális táblák. Egy dml utasítás hatására egyszer fut le a trigger akárhány rekordot is érintsen. Az inserted táblában az összes érintett rekord változás utáni értékkel szerepel. Az updated táblában az összes érintett rekord változás előtti értékkel szerepel.

A triggerek fajtái

DML, DDL és logon trigger

DDL


CREATE TRIGGER ddl_trig_database ON ALL SERVER FOR CREATE_DATABASE AS
PRINT 'Database Created’;
GO


Logon



CREATE TRIGGER connection_limit_trigger
ON ALL SERVER WITH EXECUTE AS 'login_test'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN()= 'login_test' AND
(SELECT COUNT(*) FROM sys.dm_exec_sessions
WHERE is_user_process = 1 AND
original_login_name = 'login_test') > 3
ROLLBACK;
END;


DML instead of



Create trigger trg1 on view1 instead of insert as
begin
insert into table1 select col1, col2 from inserted;
end
go


DML after



Create trigger trg2 on table2 after insert, update as
begin
if(update(col1))
begin
update table1 t set t.col2 = i.col1 * 2, t.col3 = d.col2
left outer join inserted i on i.id=t.id
left outer join deleted d on d.id=t.id
end
end
go