您的位置:首页 > 数据库

DDL_DATABASE_LEVEL_EVENTS 数据库级的触发器,创建数据库日志表

2015-02-04 10:24 435 查看
使用 SQL SERVER 2005 新增功能---数据库级的触发器,创建数据库日志表
 

 

为数据库设计人员提供了便捷,创建一个日志表,当用户添加,删除数据库对象的时候,记录下来详细的情况,也可以为数据库管理员的还原提供了参考,因为里面记录了准确的操作时间,值得大家参考。

USE [DataBaseName]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TRIGGER [ddlDatabaseTriggerLog]

ON DATABASE

FOR DDL_DATABASE_LEVEL_EVENTS    //数据库级的触发器
AS

BEGIN

    SET NOCOUNT ON;

    DECLARE @data XML;

    DECLARE @schema sysname;

    DECLARE @object sysname;

    DECLARE @eventType sysname;

    SET @data = EVENTDATA();

    SET @eventType = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'sysname');

    SET @schema = @data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname');

    SET @object = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname')

    IF @object IS NOT NULL

        PRINT '  ' + @eventType + ' - ' + @schema + '.' + @object;

    ELSE

        PRINT '  ' + @eventType + ' - ' + @schema;

    IF @eventType IS NULL

        PRINT CONVERT(nvarchar(max), @data);

    INSERT [dbo].[DatabaseLog]

        (

        [PostTime],

        [DatabaseUser],

        [Event],

        [Schema],

        [Object],

        [TSQL],

        [XmlEvent]

        )

    VALUES

        (

        GETDATE(),

        CONVERT(sysname, CURRENT_USER),

        @eventType,

        CONVERT(sysname, @schema),

        CONVERT(sysname, @object),

        @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)'),

        @data

        );

END;

GO

SET ANSI_NULLS OFF

GO

SET QUOTED_IDENTIFIER OFF

GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐