使用 SQL SERVER 2005 新增功能--- DDL_DATABASE_LEVEL_EVENTS 数据库级的触发器,创建数据库日志表

王朝mssql·作者佚名  2006-12-08
宽屏版  字体: |||超大  

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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有