Home
Manage Your Code
Snippet: Track database changes done by multiple users (SQL)
Title: Track database changes done by multiple users Language: SQL
Description: This is database trigger and track which user has updated which database object at what time. this is very useful in team work. Views: 220
Author: Vijay Prajapati Date Added: 9/3/2010
Copy Code  
USE [Sparrow4db]
GO
/****** Object:  DdlTrigger [backup_objects]    Script Date: 09/03/2010 14:04:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE trigger [backup_objects]
on database
for create_procedure, alter_procedure, drop_procedure,
create_table, alter_table, drop_table,
create_function, alter_function, drop_function
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @EventData XML
    SET @EventData = EVENTDATA();
 
    DECLARE @ip VARCHAR(32)
    SET  @ip=
        (
            SELECT client_net_address
                FROM sys.dm_exec_connections
                WHERE session_id = @@SPID
        );
 
INSERT master.dbo.DDLChangesTrack
    (
        EventType,
        EventDDL,
        DatabaseName,
        SchemaName,
        ObjectName,
        HostName,
        IPAddress,
        ProgramName,
        LoginName
    )
    SELECT
        @EventData.value('(/EVENT_INSTANCE/EventType)[1]',   'NVARCHAR(100)'), 
        @EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'NVARCHAR(MAX)'),
        DB_NAME(),
        @EventData.value('(/EVENT_INSTANCE/SchemaName)[1]',  'NVARCHAR(255)'), 
        @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]',  'NVARCHAR(255)'),
        HOST_NAME(),
        @ip,
        PROGRAM_NAME(),
        SUSER_SNAME();
END

GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ENABLE TRIGGER [backup_objects] ON DATABASE
Usage
create this trigger on database where you want to track and create "master.dbo.DDLChangesTrack" table in master DB for get tracking changes