创建数据库触发器,以审核SQL Server 2012数据库中所有表的插入

时间:2016-11-29 01:41:12

标签: sql sql-server-2012 database-trigger

我的要求是创建一个数据库触发器来跟踪此数据库下每个表上发生的所有更改。

我注意到create database触发器具有跟踪数据库级别更改但不跟踪每个表级别的更改的选项。

请建议我。

1 个答案:

答案 0 :(得分:0)

所以我想你要找的是为该数据库中的每个DML(更新,插入,删除)事件创建审计表,所以你可以像这个例子中那样为每个表做这些:

what is the correct syntax for creating a database trigger for insert, modify and delete

或者您可以使用此SP为给定表创建审核表和插入\更新\删除触发器。只需使用这样的简单脚本检索db中的所有表,将它们放在临时表中并循环遍历该表以创建审计表和触发器:

https://gallery.technet.microsoft.com/scriptcenter/Create-Audit-Table-and-5cd69d5d

   DECLARE @Table_Name VARCHAR(100)
   DECLARE @Schema_Name VARCHAR(100)

    SELECT SCHEMA_NAME(schema_id) as SchemaName,name as TableName
    INTO #Temp
    FROM sys.tables 

    While (Select Count(*) From #Temp) > 0
Begin

    Select Top 1 @Table_Name = TableName From #Temp
    Select Top 1 @Schema_Name = SchemaName From #Temp   
    EXEC GenerateTriggers @Schemaname = @Schema_Name,@Tablename  = @Table_Name, @GenerateScriptOnly = 1

    Delete #Temp Where TableName= @Table_Name and SchemaName = @Schema_Name

End