Search This Blog

Trigger on Delete with Example in SQL

Trigger on Delete with Example in SQL

In my Previous post i wrote on Triggers and showed an example of how DML Trigger Insert works.
In this post  will show how an Example of DML Delete trigger.
In case you want to know about DML Insert Trigger Read my Previos post .

http://sqlandssrssolutions.blogspot.in/2014/01/trigger-on-insert-with-example-in-sql.html

Consider a scenario where you want to have keep track of  deleted records from a table like an Audit table so the audit table will capture  the deleted values which occured in the base table.

--Base Table Script with some Records

CREATE TABLE [dbo].[EmployeeBasicDetails](
 [Empid] [int] NOT NULL,
 [EmpName] [nvarchar](50) NULL,
 [EmpSalary] [float] NULL
 ,Emp_UserName nvarchar(100),
 Emp_Password nvarchar(10)
) ON [PRIMARY]
GO


INSERT [dbo].[EmployeeBasicDetails] ([Empid], [EmpName], [EmpSalary],Emp_UserName,Emp_Password) VALUES (1, N'sumit', 5000,'Sumit_1','1235')
INSERT [dbo].[EmployeeBasicDetails] ([Empid], [EmpName], [EmpSalary] ,Emp_UserName,Emp_Password) VALUES (4, N'amit', 9000,'amit_4','121')
INSERT [dbo].[EmployeeBasicDetails] ([Empid], [EmpName], [EmpSalary],Emp_UserName,Emp_Password) VALUES (5, N'vijay', 10000,'vijay-5','111')
INSERT [dbo].[EmployeeBasicDetails] ([Empid], [EmpName], [EmpSalary],Emp_UserName,Emp_Password) VALUES (7, N'suresh', 5000 ,'suresh-7','120')
INSERT [dbo].[EmployeeBasicDetails] ([Empid], [EmpName], [EmpSalary],Emp_UserName,Emp_Password) VALUES (9, N'Mukesh', 130,'mukesh-9','132')

select * from [EmployeeBasicDetails]


--Audit table script which will store Deleted values from Employee Basic Detail Table.

CREATE TABLE [dbo].[EmployeeBasicDetails_Audit](
 [Empid] [int] NOT NULL,
 [EmpName] [nvarchar](50) NULL,
 [EmpSalary] [float] NULL
 ,Emp_UserName nvarchar(100),
 Emp_Password nvarchar(10)
) ON [PRIMARY]
GO

--Script of DML Delete Trigger that generate an action and put all the deleted values in EmployeeAudit Table

Create trigger T_delete on [EmployeeBasicDetails]
for delete
as begin
insert into [EmployeeBasicDetails_Audit] 
select * from deleted  
end


Now to test trigger we will delete a record from EmployeeBasicDetails table

delete from EmployeeBasicDetails where EmpName ='sumit'

--verifty Result
--Deleted row moved to Audit Table

Select * from [EmployeeBasicDetails_Audit] 

OUTPUT:

Empid EmpName EmpSalary Emp_UserName Emp_Password
1       sumit                   5000                  Sumit_1                   1235

--No Record with EmpName Sumit in Base Table
select * from [EmployeeBasicDetails] where EmpName ='sumit'

NOTE : In SQL 2008 Microsoft has introduced Change Data Capture to capture all the DML operations(Insert,Update and Delete) happend in the Master or baseTables.
We can use CDC also to keep track of Changes done in Master or base tables.

No comments:

Post a Comment