2010-02-26 60 views

回答

6

在SQL Server 2005以后,您可以创建数据库范围的DDL触发器,在进行架构修改时触发这些触发器。然后您可以使用数据库邮件发送电子邮件。

请参阅:Using DDL Triggers in SQL Server 2005 to Capture Schema Changes

这里是它使用EVENTDATA()的一个例子和日志表:

USE AdventureWorks 
GO 
CREATE TABLE [dbo].[tblMonitorChange] 
(
[EventType] [varchar](100) NULL, 
[SchemaName] [varchar](100) NULL, 
[ObjectName] [varchar](100) NULL, 
[ObjectType] [varchar](100) NULL, 
[EventDate] [datetime] NULL, 
[SystemUser] [varchar](100) NULL, 
[CurrentUser] [varchar](100) NULL, 
[OriginalUser] [varchar](100) NULL 
) 


USE AdventureWorks 
GO 
CREATE TRIGGER trgMonitorChange 
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS 
AS 
set nocount on 
declare @EventType varchar(100) 
declare @SchemaName varchar(100) 
declare @ObjectName varchar(100) 
declare @ObjectType varchar(100) 
SELECT 
@EventType = EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(max)') 
,@SchemaName = EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(max)') 
,@ObjectName = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)') 
,@ObjectType = EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]','nvarchar(max)') 
-- Is the default schema used 
if @SchemaName = ' ' select @SchemaName = default_schema_name from sys.sysusers u join sys.database_principals p 
         on u.uid = p.principal_id where u.name = CURRENT_USER 
insert into tblMonitorChange 
     select @EventType, @SchemaName, @ObjectName, @ObjectType, getdate(), SUSER_SNAME(), CURRENT_USER, ORIGINAL_LOGIN() 

here

+1

+1,不需要太多的添加'EXEC msdb.dbo.sp_send_dbmail ....'从该代码发送电子邮件.... – 2010-02-26 14:48:16