Inserire un trigger per avere un log delle modifiche strutturali ad un database Sql Server

Spesso può essere necessario avere un log delle modifiche dei strutturali al database in uso.

con la procedura di seguito è possibile creare un trigger che scrive in una tabella di log che si chiama LogMobDB

Creazione tabella di Log dei Dati

CREATE TABLE [LogModDB](
	[data] [datetime] NULL,
	[utente] [varchar](128) NULL,
	[comando] [varchar](max) NULL,
	[objname] [varchar](128) NULL,
	[dbname] [varchar](128) NULL
);

Creazione del trigger che va a scrivere nella tabella LogModDB

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TRIGGER [Log_Modifiche_Struttura] ON DATABASE FOR
	CREATE_TABLE,
	ALTER_TABLE,
	DROP_TABLE,
	CREATE_VIEW,
	ALTER_VIEW,
	DROP_VIEW,
	CREATE_PROCEDURE,
	ALTER_PROCEDURE,
	DROP_PROCEDURE,
	CREATE_FUNCTION,
	ALTER_FUNCTION,
	DROP_FUNCTION,
	CREATE_INDEX,
	ALTER_INDEX,
	DROP_INDEX,
	CREATE_ASSEMBLY,
	ALTER_ASSEMBLY,
	DROP_ASSEMBLY,
	CREATE_TRIGGER,
	ALTER_TRIGGER,
	DROP_TRIGGER,
	CREATE_SCHEMA,
	ALTER_SCHEMA,
	DROP_SCHEMA
	AS
 
	DECLARE @command AS VARCHAR(MAX)
	DECLARE @login AS VARCHAR(128)
	DECLARE @db AS VARCHAR(128)
	DECLARE @objName AS VARCHAR(128)
	 
	SELECT @login = SUSER_SNAME()
	SELECT @command = EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
	SELECT @objName = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)')
	SELECT @db = DB_NAME()
	 
	--Inserisco la modifica nello storico
	INSERT INTO LogModDB
		values
		(
			getdate(),
			@login,
			@command,
			@objName,
			@db
		)
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ENABLE TRIGGER [Log_Modifiche_Struttura] ON DATABASE
GO
Avatar

About Diego Mancinelli

Da sempre appassionato di informatica e tutto ciò che riaguarda l' Information Tecnology. Mi occupo di progettazione, analisi e sviluppo di software e applicazioni web per piattaforme Windows, Android, iOS