SQL server 觸發器(監控表數據 某字段更新後觸發)

現有業務表 Business_CustomerRisksBasicInfoStatus
程序修改其中 [HomeVisitReportCount] [LawyerLetterCount] 兩列時未記日誌、
由觸發器實現監控目的、
具體sql如下、

創建日誌記錄表


CREATE TABLE [dbo].[tb_RisksStatusLog](
	[Id] [UNIQUEIDENTIFIER] NOT NULL CONSTRAINT [DF_tb_RisksStatusLog_Id]  DEFAULT (NEWID()),
	[Operate] [VARCHAR](50) NOT NULL,    ---操作
	[UpdateColumn] [VARCHAR](50) NULL,  ---修改的列
	[ApplicationNumber] [VARCHAR](50) NULL,  ---業務編號
	[OldValue] [INT] NULL,   -----舊值
	[NewValue] [INT] NULL,   -----新值
	[OperatedAt] [DATETIME] NOT NULL CONSTRAINT [DF_tb_RisksStatusLog_OperatedAt]  DEFAULT   (GETDATE())     ---修改時間
) ON [PRIMARY]

創建觸發器

   CREATE TRIGGER [dbo].[tr_RisksBasicInfoStatus]
    ON [dbo].[Business_CustomerRisksBasicInfoStatus] AFTER UPDATE,INSERT,DELETE
    AS
    

    BEGIN 
   
      DECLARE @op VARCHAR(10)
   SELECT @op=CASE WHEN EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
                   THEN 'Update'
                   WHEN EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)
                   THEN 'Insert'
                   WHEN NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
                   THEN 'Delete' END


       IF UPDATE(HomeVisitReportCount)  
       BEGIN
       INSERT INTO dbo.tb_RisksStatusLog
               ( 
                 Operate ,
				 UpdateColumn,
                 ApplicationNumber ,
                 OldValue ,
                 NewValue 
               ) 
         SELECT @op,'HomeVisitReportCount',n.ApplicationNum,o.HomeVisitReportCount,n.HomeVisitReportCount  
         FROM inserted n
         LEFT JOIN deleted o ON o.id=n.id
       END
   IF UPDATE(LawyerLetterCount)   
       BEGIN
       INSERT INTO dbo.tb_RisksStatusLog
               ( 
                 Operate ,
				 UpdateColumn,
                 ApplicationNumber ,
                 OldValue ,
                 NewValue 
               ) 
         SELECT @op,'LawyerLetterCount',n.ApplicationNum,o.LawyerLetterCount,n.LawyerLetterCount  
         FROM inserted n
         LEFT JOIN deleted o ON o.id=n.id
       END
    END
 

搞定!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章