2014-01-22 43 views
1

我想创建一个触发器,它通过电子邮件向我发送在服务器中创建的数据库的名称。每当创建数据库时,我都会收到一封电子邮件。请帮忙。带示例的DDL触发器

我曾尝试下面的代码只是返回打印语句,但不工作:

IF EXISTS (SELECT * FROM sys.server_triggers 
WHERE name = 'ddl_trig_database') 
DROP TRIGGER ddl_trig_database 
ON ALL SERVER; 
GO 
CREATE TRIGGER ddl_trig_database 
ON ALL SERVER 
FOR CREATE_DATABASE 
AS 
PRINT 'Database Created.' 
SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') 
GO 
DROP TRIGGER ddl_trig_database 
ON ALL SERVER; 
GO 
+1

你触发工作正常,我。当然,在这个确切的脚本中,您将放弃触发器(如果存在),然后创建触发器,然后再次删除它。接下来的问题是如何让它发送给你一封电子邮件; [有很多答案](http://stackoverflow.com/search?tab=votes&q=%5bsql-server%5d%20send%20e-mail)。如果您添加试图发送电子邮件的代码,但无法使其正常工作,请回到此处,并提供有关该代码的特定问题。 –

回答

0

你举的例子是MSDN之一。这里的只是审计其中一个例子已创建的DB的:

CREATE TABLE master.dbo.NewDB 
(
    DbName NVARCHAR(200), 
    DateCreated DATETIME CONSTRAINT DF_NewDBCreated DEFAULT(CURRENT_TIMESTAMP) 
) 
GO 

CREATE TRIGGER ddl_trig_database 
    ON ALL SERVER 
    FOR CREATE_DATABASE 
AS 
    INSERT INTO master.dbo.NewDB(DbName) 
     SELECT EVENTDATA() 
    .value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') 
GO 


CREATE DATABASE DB1 
GO 
CREATE DATABASE DB2 
GO 
SELECT * FROM master.dbo.NewDB; 

...

CREATE DATABASE DB1 2014-01-22 16:57:43.280  
    CREATE DATABASE DB2 2014-01-22 16:57:47.250 
+0

hi StuartLC如何创建登录触发器 – Anjali

+0

@Anjali - 欢迎来到Stackoverflow。不要在旧帖子上提出问题,你需要发布一个新问题(在检查后确保没有问题的重复) - 像这样的旧问题没有得到太多关注。 – StuartLC