我在UPDATE和INSERT上有一个表触发器,该触发器将行添加到另一个表中。如果更改了四列之一,则只需添加一行。我尝试使用IF UPDATE(col)来测试更改,但它有一个盲点。它仅测试是否引入了一些价值。我需要更深入地研究,我需要比较新旧价值,以查看是否发生了真正的变化。它必须同时使用INSERT和UPDATE。
在UPDATE的情况下很容易,因为插入和删除的表都具有我可以在触发器中比较的值。但是,对于INSERT,只有插入表具有值。因为我需要在同一触发器中完成所有操作,所以如何处理INSERT情况?
这是我要修改的触发器的脚本:
ALTER TRIGGER [dbo].[trATPerson_alter]
ON [mydb].[dbo].[AT_Person]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
-- Not all updates require a push
IF (UPDATE([First_Name]) OR UPDATE([Last_Name]) OR UPDATE([JobCode]) OR UPDATE([Inactive]))
BEGIN
INSERT INTO [mydb].[dbo].[AT_Person_To_Push] (
[Facility],
[VendorID],
[Person_code],
[First_Name],
[Last_Name],
[JobCode],
[Alink],
[Inactive]
)
SELECT [Facility],
[VendorID],
[Person_code],
[First_Name],
[Last_Name],
[JobCode],
[Alink],
[Inactive]
FROM inserted
END
END
2
快速使用“ IF UPDATE(<column>)”一词。如果DML为列指定值,则返回true,而不管该值是否实际更改。
—
乔纳森·菲特