Scenario:
Sometime we have to write a trigger on table to capture changes for different operation such as Insert, Update and Delete. Here is sample Code that can be modified according to the Source Table.Solution:
I have created dbo.Customer Table as Source Table on which I want to create DML After trigger. After that I have created an Audit Table for dbo.Customer with name dbo.Customer_Audit which is going to save all changes.
USE TestDB GOCREATE TABLE dbo.Customer ( [CustomerID] INT IDENTITY(1, 1), [Name] VARCHAR(50), [ADDRESS] VARCHAR(100) ) GO CREATE TABLE dbo.Customer_Audit ( [CustomerID] INT, [Name] VARCHAR(50), [ADDRESS] VARCHAR(100), [OperationDate] [DATETIME] NOT NULL, [Operation] [VARCHAR](50) NOT NULL, [OperationBy] [VARCHAR](100) NOT NULL )
--Create DML After Trigger
CREATE TRIGGER [dbo].[Tr_Customer_Audit]ON [dbo].[Customer]FOR INSERT, UPDATE, DELETE AS SET NOCOUNT ON; --Capture the Operation (Inserted, Deleted Or Updated)
DECLARE @operation AS VARCHAR(10) DECLARE @Count AS INT SET @operation = 'Inserted' SELECT @Count = COUNT(*) FROM DELETED IF @Count > 0 BEGIN SET @operation = 'Deleted' SELECT @Count = COUNT(*) FROM INSERTED IF @Count > 0 SET @operation = 'Updated' END --Capturing Delete Operation
IF @operation = 'Deleted' BEGIN INSERT INTO dbo.Customer_Audit ([CustomerID], [Name], [ADDRESS], [OperationDate], [Operation], [OperationBy]) SELECT [CustomerID], [Name], [ADDRESS], GETDATE() AS [OperationDate], 'Deleted' AS [Operation], Suser_name() AS [OperationBy] FROM deleted END ELSE BEGIN
--Capturing Insert Operation
IF @operation = 'Inserted' BEGIN INSERT INTO dbo.Customer_Audit ([CustomerID], [Name], [ADDRESS], [OperationDate], [Operation], [OperationBy]) SELECT [CustomerID], [Name], [ADDRESS], GETDATE() AS [OperationDate], 'Inserted' AS [Operation], Suser_name() AS [OperationBy] FROM inserted END
--Capture Update Operation
ELSE BEGIN INSERT INTO dbo.Customer_Audit ([CustomerID], [Name], [ADDRESS], [OperationDate], [Operation], [OperationBy]) SELECT [CustomerID], [Name], [ADDRESS], GETDATE() AS [OperationDate], 'Updated' AS [Operation], Suser_name() AS [OperationBy] FROM inserted END END
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.