簡體   English   中英

僅當值實際更改時才觸發表更新

[英]Trigger update of a table only if the value was actually changed

有沒有一種方法可以創建僅在更改了實際數據后才更新表的觸發器?

在下面,您可以看到我的觸發器,如果idu_idmanager_id得到更新,它將觸發。 但是,如果您強制將更改從1更改為1進行,即使更新的表將保持不變,它仍然會觸發。

ALTER TRIGGER [dbo].[TRG_UpdatePersonal]
   ON  [dbo].[HC_EMP] 
   FOR UPDATE AS IF ( UPDATE([manager_id]) OR UPDATE([idu_id])) 

    DECLARE @user_login VARCHAR(50)
    DECLARE @Action varchar (10)
    SELECT @user_login = dbo.udf_GetUserLogin()

BEGIN
IF UPDATE (idu_id)
Insert into [dbo].[HC_HISTORY]
(

    [EmpID]
   ,[ACTIONDATE]
   ,[TYPEID]
   ,[MESSAGE]
   ,[InitiatorID]
   ,[OldIdu]
   ,[NewIdu]
)
select

   d.[company_id]
   ,GETUTCDATE()
   ,3
   ,'Some Data'
   ,@user_login
   ,d.idu_id
   ,i.idu_id
from Deleted d join INSERTED i on d.company_id = i.company_id

IF UPDATE (manager_id)
Insert into [dbo].[HC_HISTORY]
(   
   [EmpID]
   ,[ACTIONDATE]
   ,[TYPEID]
   ,[MESSAGE]
   ,[InitiatorID]
   ,[OldManagerId]
   ,[NewManagerId]
)
select

   d.[company_id]
   ,GETUTCDATE()
   ,4
   ,'Some Other Data'
   ,@user_login
   ,d.manager_id
   ,i.manager_id
from Deleted d join INSERTED i on d.company_id = i.company_id
END

在where子句中添加一個過濾器。 像這樣嘗試

ALTER TRIGGER [dbo].[TRG_UpdatePersonal] ON [dbo].[HC_EMP]
FOR UPDATE
AS
IF (
        UPDATE ([manager_id])
            OR
        UPDATE ([idu_id])
        )
    DECLARE @user_login VARCHAR(50)
DECLARE @Action VARCHAR(10)

SELECT @user_login = dbo.udf_GetUserLogin()

BEGIN
    INSERT INTO [dbo].[HC_HISTORY] (
        [EmpID]
        ,[ACTIONDATE]
        ,[TYPEID]
        ,[MESSAGE]
        ,[InitiatorID]
        ,[OldIdu]
        ,[NewIdu]
        )
    SELECT d.[company_id]
        ,GETUTCDATE()
        ,3
        ,'Some Data'
        ,@user_login
        ,d.idu_id
        ,i.idu_id
    FROM Deleted d
    JOIN INSERTED i ON d.company_id = i.company_id
    WHERE d.idu_id <> i.idu_id

    INSERT INTO [dbo].[HC_HISTORY] (
        [EmpID]
        ,[ACTIONDATE]
        ,[TYPEID]
        ,[MESSAGE]
        ,[InitiatorID]
        ,[OldManagerId]
        ,[NewManagerId]
        )
    SELECT d.[company_id]
        ,GETUTCDATE()
        ,4
        ,'Some Other Data'
        ,@user_login
        ,d.manager_id
        ,i.manager_id
    FROM Deleted d
    JOIN INSERTED i ON d.company_id = i.company_id
    WHERE d.manager_id <> i.manager_id
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM