【发布时间】:2017-09-20 13:41:39
【问题描述】:
我已设置以下审核触发器,以在我的更改日志中创建记录更改的副本(如果我们需要查看我们的数据发生了什么)。问题是每次我更新记录时,它都会在我的日志表中创建 3 条记录。
您可以在下面看到结果集和我一直在使用的代码。
代码:
/* ==Scripting Parameters==
Source Server Version : SQL Server 2016 (13.0.4446)
Source Database Engine Edition : Microsoft SQL Server Standard Edition
Source Database Engine Type : Standalone SQL Server
Target Server Version : SQL Server 2017
Target Database Engine Edition : Microsoft SQL Server Standard Edition
Target Database Engine Type : Standalone SQL Server
*/
USE [STONE_DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tr_set_for_update_audit_fields]
ON [dbo].[permission_types]
FOR UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO STONE_DB_CHANGE_LOGS.dbo.permission_types_log ([permission_type_id], [business_process], [active], [created_at], [created_by], [change_type], [change_user], [change_at])
SELECT DISTINCT
inserted.id,
inserted.[business_process], inserted.[active],
inserted.[created_at], inserted.[created_by],
'U', SYSTEM_USER, GETDATE()
FROM
inserted
WHERE
1 = 1
AND inserted.[created_at] < getdate();
UPDATE [dbo].[permission_types]
SET updated_at = GETDATE(), updated_by = SYSTEM_USER
FROM [dbo].[permission_types]
INNER JOIN inserted ON permission_types.id = inserted.id
WHERE 1 = 1
--AND permission_types.updated_at < getdate()
;
PRINT 'Record Updated'
END
【问题讨论】:
-
permission_types 表中是否存在多次相同的 id?
-
您创建一个更新触发器,然后在触发器内执行更新...尝试从触发器中删除更新语句...
标签: sql-server triggers