For SQL Server 2005 and above, you can add a DDL trigger, for example:
CREATE TRIGGER [YourDatabaseTrigger] ON DATABASE FOR DDL_EVENTS AS DECLARE @EventData xml DECLARE @Message varchar(1000) SET @EventData=EVENTDATA() INSERT INTO YourLogTable (EventDateTime,EventDescription) VALUES (GETDATE(),SUSER_NAME() +'; ' +@EventData.value ('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(250)') +'; ' +@EventData.value ('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(250)') +'; ' +@EventData.value ('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') ) RETURN GO ENABLE TRIGGER [YourDatabaseTrigger] ON DATABASE
Then you need to create triggers (for INSERT / UPDATE / DELETE) for each table in the database that will be inserted into the same table:
CREATE TRIGGER YourTableTrigger On YourTable FOR INSERT AS INSERT INTO YourLogTable (EventDateTime,EventDescription) SELECT GETDATE(),SUSER_NAME() +'; INSERT YourTable'+ +'; data='+...your column data here... FROM INSERTED GO
source share