sql server ___________session_20(ddl triggers)

10
Triggers

Upload: ehtisham-ali

Post on 20-Jan-2017

164 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Sql server  ___________session_20(ddl triggers)

Triggers

Page 2: Sql server  ___________session_20(ddl triggers)

SYNTAX to add DDL TriggerCREATE TRIGGER [name of trigger]

ON [scope (database|server)] FOR [event] As --Trigger definition here…

Page 3: Sql server  ___________session_20(ddl triggers)

Create table back_up(actions varchar(20), action_date datetime) create trigger ddl_trg on databasefor create_table(,alter_table,drop_table)as declare @ac varchar(20); SELECT top 1 @ac = name FROM sys.tables insert into back_up values(@ac+' table has

been created', getdate()) print 'table created';

For Example

Page 4: Sql server  ___________session_20(ddl triggers)

For Examplecreate table std(id int, name varchar(20))select * from back_up

Page 5: Sql server  ___________session_20(ddl triggers)

create trigger ddl_db on all serverfor create_databaseas declare @ac varchar(20); declare @dt varchar(30); SELECT top 100 percent @ac = name FROM

sys.databases; set @dt=getdate(); print @ac+' database has been created on '+ @dt;

For Example

Page 6: Sql server  ___________session_20(ddl triggers)

For Example create database student_management

Page 7: Sql server  ___________session_20(ddl triggers)

ALTER TABLE Employee_Test {ENABLE|DISBALE} TRIGGER ALL

ALTER TABLE Employee_Test DISABLE TRIGGER trgAfterDelete

For Example

Page 8: Sql server  ___________session_20(ddl triggers)

Nested triggers Triggers are said to be nested if one trigger action

initiates another trigger.

create trigger trgNestedInsert on Employee_Test_Audit for insert

as print 'NESTED INSERT trigger fired';

Page 9: Sql server  ___________session_20(ddl triggers)

Instead Of Triggers These can be used as an interceptor for anything that

anyone tried to do on our table or view. If you define an Instead Of trigger on a table for the Delete operation, they try to delete rows, and they will not actually get deleted (unless you issue another delete instruction from within the trigger)INSTEAD OF TRIGGERS can be classified further into three types as:-

(a) INSTEAD OF INSERT Trigger. (b) INSTEAD OF UPDATE Trigger. (c) INSTEAD OF DELETE Trigger.

Page 10: Sql server  ___________session_20(ddl triggers)

CREATE TRIGGER trgInsteadOfDelete ON Employee_Test INSTEAD OF DELETE AS declare @emp_id int; declare @emp_name varchar(100); declare @emp_sal int; select @emp_id=d.Emp_ID from deleted d; select @emp_name=d.Emp_Name from deleted d; select @emp_sal=d.Emp_Sal from deleted d;

BEGIN if(@emp_sal>1200) begin RAISERROR('Cannot delete where salary > 1200',16,1); ROLLBACK; end else begin delete from Employee_Test where Emp_ID=@emp_id; COMMIT; insert into Employee_Test_Audit(Emp_ID,Emp_Name,Emp_Sal,Audit_Action,Audit_Timestamp) values(@emp_id,@emp_name,@emp_sal,'Deleted -- Instead Of Delete Trigger.',getdate()); PRINT 'Record Deleted -- Instead Of Delete Trigger.' end END

Instead Of Triggers