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
CREATE TABLE [LogModDB](
[data] [datetime] NULL,
[utente] [varchar](128) NULL,
[comando] [varchar](max) NULL,
[objname] [varchar](128) NULL,
[dbname] [varchar](128) NULL
);
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