SQL Server触发器记录销售订单物流单号字段的值更新日志(带语句脚本)原创
1人赞赏了该文章
74次浏览
编辑于2024年11月01日 13:55:22
有些特殊字段如果想跟踪何时修改成什么值,以及想跟踪由什么语句触发更新的,可以参照本论坛类似地处理。注:本帖子是由触发器记录的日志,目前公有云客户应该是不能创建触发器的。
--创建日志表 CREATE TABLE SO_TRACE ( ID INT IDENTITY(1,1), FENTRYID INT, OLD_CARRYBILLNO NVARCHAR(4000), NEW_CARRYBILLNO NVARCHAR(4000), UP_DATE DATETIME, UP_TYPE NVARCHAR(200), UP_SQL VARCHAR(8000) ); --创建触发器 IF OBJECT_ID('TR_LOG_TRACE') <> 0 DROP TRIGGER TR_LOG_TRACE; GO CREATE TRIGGER TR_LOG_TRACE ON T_SAL_ORDERTRACE FOR INSERT, UPDATE, DELETE AS --DBCC INPUTBUFFER EventInfo字段,只取事件前4000字符 DECLARE @STR01 AS VARCHAR(255) DECLARE @STR_SQL AS VARCHAR(8000) CREATE TABLE #SQL_CONTENT ( C_EventType VARCHAR(255), C_Parameters VARCHAR(255), C_EventInfo VARCHAR(8000) ); SET @STR01 = 'DBCC INPUTBUFFER(' + CAST(@@SPID AS VARCHAR(50)) + ')' INSERT INTO #SQL_CONTENT EXEC(@STR01) SELECT @STR_SQL = C_EventInfo FROM #SQL_CONTENT; IF UPDATE(FCARRYBILLNO) BEGIN INSERT INTO SO_TRACE(FENTRYID, OLD_CARRYBILLNO, NEW_CARRYBILLNO, UP_DATE, UP_TYPE, UP_SQL) SELECT A.FENTRYID, B.FCARRYBILLNO, A.FCARRYBILLNO, GETDATE(), 'UPDATE\INSERT', @STR_SQL FROM INSERTED A LEFT JOIN DELETED B ON A.FENTRYID = B.FENTRYID; END; IF EXISTS(SELECT 1 FROM DELETED) AND NOT EXISTS (SELECT 1 FROM INSERTED) BEGIN INSERT INTO SO_TRACE(FENTRYID, OLD_CARRYBILLNO, NEW_CARRYBILLNO, UP_DATE, UP_TYPE, UP_SQL) SELECT A.FENTRYID, A.FCARRYBILLNO, B.FCARRYBILLNO, GETDATE(), 'DELETE', @STR_SQL FROM DELETED A LEFT JOIN INSERTED B ON A.FENTRYID = B.FENTRYID WHERE B.FENTRYID IS NULL; END; GO
销售订单保存时如果输入物流单号,则会出现一条带INSERT INTO T_SAL_ORDERTRACE的语句,如果是下推出库单,在出库单中保存另一个物流单号且快递100参数配置中勾选了'出库单保存回填上游通知单、订单物流单号和公司'参数,则会出现一条MERGE INTO T_SAL_ORDERTRACE的语句,如下图1-1所示:
图1-1
赞 1
1人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读