2014-01-22 27 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