sql-server - 插入、更新、删除触发器

标签 sql-server triggers audit

每当主表“Table1”中发生插入、更新或删除时,我想将行插入审计表中 - 无论更改/插入哪一列。我还想在插入、更新或删除时添加 I、U 或 D。对于插入和删除,我正在检查插入和删除的表中是否存在行。进行更新的最佳方式是什么。

我的插入和删除代码是:

CREATE TRIGGER [dbo].[tr_Table1_InsertUpdate_Table1History_Insert]
ON [dbo].[Table1]
FOR INSERT, DELETE, UPDATE

AS
BEGIN
 IF EXISTS(SELECT * FROM Inserted)
 BEGIN
  INSERT INTO Table1History(...., ModificationType)
  SELECT ..., 'I'
  FROM Inserted
 END


 IF EXISTS(SELECT * FROM Deleted)
 BEGIN
  INSERT INTO Table1History(..., ModificationType)
  SELECT ..., 'D'
  FROM Deleted
 END

END
GO

请帮忙!

最佳答案

对于更新,行的原始值将添加到已删除的表中,而行的新值将添加到插入的表中。因此,要识别插入、删除和更新,您将执行以下操作

  • 插入 - 获取插入中未删除的行
  • 删除 - 从已删除的行中获取未插入的行。
  • 更新 - 获取插入和删除的行

关于sql-server - 插入、更新、删除触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4111498/

相关文章:

java - 数据库审计表

c# - linqTOsql 在运行时返回 "specified cast not valid"异常

triggers - 来自 12 :04 to 14:25 的 Cron 触发器

MySQL触发器未编译和逻辑

MySql 插入前触发器不起作用

database - 实现审计追踪——Spring AOP vs.Hibernate Interceptor vs DB Trigger

java - 使用 EclipseLink JPA 审计 Oracle

sql-server - 使用 bash 脚本连接到远程 SQL Server

mysql - 如何编写 SQL 查询以避免重复?

SQL Server 条件流