我有这两个表: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(使用前将#替换为@)