SQL Server 2008 - 在插入/更新触发器上将值复制到另一个表?

2024-01-08

我有这两个表:Tasks 和TasksHistory,从名称中您可以猜到我想创建Tasks 中发生的所有事情的历史记录。因此,插入或更新的每个新行都需要进入历史表,只需忽略它被删除的时间,以确保该行在历史记录中安全。我的想法是历史是精确复制品原始表的。

我怎样才能实现这个目标?


非常简单...

CREATE TRIGGER TRG_Tasks_UI ON Tasks FOR INSERT,UPDATE
AS
SET XACT_ABORT, NOCOUNT ON

--Ignore zero row updates, inserts
IF NOT EXISTS (SELECT * FROM INSERTED) RETURN;

BEGIN TRY
    INSERT TasksHistory
       (col1, col2, ...)
    SELECT
       I.*
    FROM
       INSERTED I
       LEFT JOIN
       DELETED D ON I.key = D.Key
    WHERE
       D.Key IS NULL --insert only
       OR -- need null handling here
       I.col1 <> D.col1 OR I.col2 <> D.col2 OR ...;
END TRY
BEGIN CATCH
   IF XACT_STATE() <> 0 ROLLBACK TRANSACTION
    RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]
END CATCH
GO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 2008 - 在插入/更新触发器上将值复制到另一个表? 的相关文章

随机推荐