2016-11-29 3 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, который создает таблицу аудита и вставляет \ обновить/удалить триггеры для данной таблицы. Просто получить все таблицы в БД с помощью простого сценария, как это, поместить их в временную таблицу и петлю через эту таблицу, чтобы создать таблицу аудита и триггеров:

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 
Смежные вопросы