2016-11-29 2 views
0

Mon exigence est de créer un déclencheur de base de données pour suivre toutes les modifications apportées à chaque table sous cette base de données.Créer un déclencheur de base de données, pour auditer l'insertion sur toutes les tables de la base de données SQL Server 2012

J'ai remarqué que créer un déclencheur de base de données ayant des options pour suivre les changements au niveau de la base de données mais pas à chaque niveau de la table.

Je vous suggère.

+0

Avez-vous essayé ces? https://gallery.technet.microsoft.com/scriptcenter/Create-Audit-Table-and-5cd69d5d https://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to- track-all-database-changes / – Avias

Répondre

0

donc je suppose que ce que vous cherchez est la création de tableaux d'audit pour chaque événement DML (mise à jour, insérer, supprimer) dans cette base de données, vous pouvez le faire comme dans cet exemple pour chaque table:

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

Ou vous pouvez utiliser ce SP qui crée une table d'audit et insérer \ Update \ Delete Triggers pour une table donnée. Il suffit de récupérer toutes les tables db avec un script simple comme celui-ci, les mettre dans une table temporaire et boucle à travers cette table pour créer la table d'audit et déclencheurs:

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