2016-07-20 11 views
0

実際のデータが変更された場合にのみテーブルを更新するトリガーを作成する方法はありますか?値が実際に変更された場合にのみテーブルの更新をトリガー

以下はidu_idまたはmanager_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 

答えて

1

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 
+0

これはやっているようです。ありがとう –

関連する問題