前言
业务需要对某些表数据进行日志记录,记录新增数据的日志和修改数据对比后的日志,创建sql触发器来自动记录这些数据就变得极为方便。
触发器原理
当你的sql执行 INSERT,DELETE,UPDATE语句时系统自动在内存中创建deleted表或inserted表简称d表和i表,存在于内存当中,只能读取使用完自动删除。
i表:临时保存了插入或更新后的记录行
d表:临时保存了删除或更新前的记录行
创建步骤
1 先找到需要建触发器的表,点开找到触发器,右键新建触发器
2 开始编写sql语句
CREATE TRIGGER trg_TableName -- 触发器的名称
ON [dbo].[tStockSKU] -- 需要监控的表
AFTER UPDATE -- 当执行更新语句时触发
AS
BEGIN
DECLARE @LogDescription NVARCHAR(MAX) = '';
DECLARE @userid uniqueidentifier;
-- 获取修改记录
SELECT @LogDescription =
CASE
WHEN i.ChineseName <> d.ChineseName THEN '原中文名称:' + d.ChineseName + ' 更新为:' + i.ChineseName + ';'
ELSE ''
END +
CASE
WHEN i.EnglishName <> d.EnglishName THEN '原英文名称:' + d.EnglishName + ' 更新为:' + i.EnglishName + ';'
ELSE ''
END
,@userid=i.UpdateUserId
FROM INSERTED i
JOIN DELETED d ON i.OwnGuid = d.OwnGuid;
if @LogDescription is not null and @LogDescription <> ''
insert into tSysLog([type],[title],[Keys],[Content],[UpdateUserId],[UpdateDate])
values (1999,'表修改记录','',@LogDescription,@userid,getdate())
END