2016-11-29 66 views
0

我的要求是创建一个数据库触发器来跟踪此数据库下每个表上发生的所有更改。创建数据库触发器,以在SQL Server 2012数据库中的所有表上审计插入

我注意到,创建数据库触发器有选项来跟踪数据库级别的变化,但不是在每个表级别上。

请给我建议。

+0

您是否尝试过这些? https://gallery.technet.microsoft.com/scriptcenter/Create-Audit-Table-and-5cd69d5d https://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-跟踪所有数据库更改/ – Avias

回答

0

所以我猜你正在寻找在该数据库中创建审核表为每个DML(更新,插入,删除)事件是什么,这样你就可以这样做在这个例子中为每个表:

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

或者您可以使用此SP为给定表创建审核表并插入\ Update \ Delete触发器。只是检索数据库中的所有表有这样一个简单的脚本,把它们放在一个临时表和循环通过该表创建审计表和触发器:

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