4. nov 2008

MSSQL : DDL trigger ehk paneme pirukasse muna

Üldiselt tavaolukorras ei ole DDL triggereid eriti vaja, ainus hea rakendus neile on andmebaasis toimunud muudatuste logimiseks. Olen seda vaid kasutanud testimisel , üks lihtne näide.


create trigger ainultadminn
on database
for DDL_TABLE_EVENTS
-- DDL_DATABASE_LEVEL_EVENTS
as
begin
declare @xmldat xml
declare @event nvarchar(128)
declare @sql nvarchar(max)
set @xmldat=EVENTDATA()
set @event=isnull(@xmldat.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(128)'),'')
set @sql=isnull(@xmldat.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)'),'')

if (CURRENT_USER not in ('dbo','sa')) and (@event in ('ALTER_TABLE','DROP_TABLE'))
begin
raiserror('--- Viga: Sa tegeled vale asjaga',16,1)
rollback
end
end;


Sündmuste tüüpide kirjelduse saab siit :
http://msdn.microsoft.com/en-us/library/bb510452.aspx

Ps. DDL triggerid on toetatud alates MSSQL 2005



Soovitan ka tutvuda Logon triggeritega, ala ntx. kasutaja Karu saab siis sisselogida, kui kasutaja Mesitaru on väljas jne

Logon Triggers

Kommentaare ei ole: