Sql server DDL触发器及其示例

Sql server DDL触发器及其示例,sql-server,tsql,triggers,ddl-trigger,Sql Server,Tsql,Triggers,Ddl Trigger,我想创建一个触发器,通过电子邮件向我发送服务器中创建的数据库的名称。无论何时创建数据库,我都会收到一封电子邮件。请帮忙 我尝试了以下代码,只是为了返回打印语句,但不起作用: 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 O

我想创建一个触发器,通过电子邮件向我发送服务器中创建的数据库的名称。无论何时创建数据库,我都会收到一封电子邮件。请帮忙

我尝试了以下代码,只是为了返回打印语句,但不起作用:

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

你的例子就是上面的例子。下面是一个仅审核已创建数据库的示例:

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;


您的触发代码工作正常,除非您需要注释触发代码或删除触发代码,如下面的屏幕截图所示

阅读有关上的SQL触发器的更多信息


你的扳机对我很好。当然,在这个脚本中,如果触发器存在,则删除它,然后创建触发器,然后再次删除它。下一个问题是如何让它向您发送电子邮件。如果您添加了试图发送电子邮件的代码,但无法使其正常工作,请返回此处,询问有关该代码的具体问题。您好,StuartLC如何创建登录triggers@Anjali-欢迎来到Stackoverflow。不要在旧帖子上提问,你需要在检查后发布一个新问题,以确保没有与你的问题重复的问题-像这样的旧问题不会得到太多关注。
   CREATE DATABASE DB1  2014-01-22 16:57:43.280    
   CREATE DATABASE DB2  2014-01-22 16:57:47.250