![](/img/trans.png)
[英]creating a trigger to update a date in a table before a specific value is changed
[英]Trigger update of a table only if the value was actually changed
有沒有一種方法可以創建僅在更改了實際數據后才更新表的觸發器?
在下面,您可以看到我的觸發器,如果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
在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.