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
Aivivu chuyên vé máy bay, tham khảo
ReplyDeletesăn vé máy bay giá rẻ đi Mỹ
giá vé máy bay từ mỹ về việt nam
vé máy bay từ đài loan về Việt Nam
vé máy bay đi từ Hàn Quốc về Việt Nam
vé máy bay từ anh về việt nam vietnam airlines
chuyến bay từ nhật về việt nam