Triggers- DML - after triggers(for)
There are 4 types of triggers. they are :
1. DML triggers
2.DDL triggers.
3. CLR triggers.
4. Logon Triggers
1. DML triggers:
Triggers fired inresponse of DML events (insert, update, delete).
It can also be classified into two types:
1. After Triggers (also known as FOR triggers.)
2. Instead of Triggers
1.After Triggers
Triggers fired after insert update or delete events.
1. After Insert trigger (example):
alter trigger tr_Employee on Employee for Insert
as Begin
Declare
@id int
set @id= (select Id from Inserted) --id column from the inserted row which WAS inserting
insert into HousePartyLog select 'House party candidate added with id' + cast(@id as varchar(50)) + cast(getdate() as varchar(max))
end
Inserted table is auto created table while insert operation is carried out by trigger. this table records recently inserted rows when the trigger is fired.
2. After delete trigger
It also maintains an auto generated table named "Deleted" table.
We can simply do anything when delete is fired in particular table.
USE [testDatabase]
GO
/****** Object: Trigger [dbo].[tr_Employee_deleted] Script Date: 02/11/2020 5:07:09 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tr_Employee_deleted] ON [dbo].[Employee] FOR DELETE
AS BEGIN
DECLARE
@ID INT
select @ID= Id FROM deleted
INSERT INTO dbo.HousePartyLog
( Info )
VALUES ( CAST(@ID AS varchar(10)) + 'Is deleted at' + CAST(GETDATE() AS varchar(max))) -- Info - varchar(max)
END
3. after update Triggers
Unlike insert and delete trigger,it doent generate update table since update is a combination of both insert and delete, therefore update creates both insert and delete table and we can use them as how we like.
USE [testDatabase]
GO
/****** Object: Trigger [dbo].[tr_employee_up] Script Date: 02/11/2020 3:08:40 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[tr_employee_up]
on [dbo].[Employee]
for Update
as
Begin
-- Declare variables to hold old and updated data
Declare @Id int
Declare @OldName nvarchar(20), @NewName nvarchar(20)
Declare @NewEmployeeId int, @OldEmployeeId int
-- Variable to build the audit string
Declare @AuditString nvarchar(1000)
-- Load the updated records into temporary table
Select *
into #TempTable
from inserted
Select *
into #TempTable2
from deleted
-- Loop thru the records in temp table
-- While(Exists(Select Id from #TempTable))
Begin
--Initialize the audit string to empty string
Set @AuditString = ''
-- Select first row data from temp table
Select Top 1 @Id = Id, @NewName = Name,
@NewEmployeeId = EmployeeId from #TempTable
-- Select the corresponding row from deleted table
Select top 1 @OldName = Name, @OldEmployeeId = EmployeeId from #TempTable2
-- Build the audit string dynamically
Set @AuditString = 'Employee with Id = ' + Cast(@Id as nvarchar(4)) + ' changed'
if(@OldName <> @NewName)
Set @AuditString = @AuditString + ' NAME from ' + @OldName + ' to ' + @NewName
if(@OldEmployeeId <> @NewEmployeeId)
Set @AuditString = @AuditString + ' employeeid from ' + cast(@OldEmployeeId as varchar(max)) + ' to ' + cast(@NewEmployeeId as varchar(max))
insert into HousePartyLog values(@AuditString)
-- Delete the row from temp table, so we can move to the next row
Delete from #TempTable where Id = @Id
truncate table #TempTable2
End
End
Comments
Post a Comment