【问题标题】:DDL Trigger with exampleDDL 触发器示例
【发布时间】:2014-02-12 16:45:08
【问题描述】:

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

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

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

【问题讨论】:

  • 你的触发器对我来说很好用。当然,在这个确切的脚本中,您要删除触发器(如果存在),然后创建触发器,然后再次删除它。下一个问题是如何让这个给你发送电子邮件; there are plenty of answers for that。如果您添加了尝试发送电子邮件的代码,但您无法使其正常工作,请返回此处询问有关该代码的具体问题。

标签: sql-server tsql triggers ddl-trigger


【解决方案1】:

您的示例是MSDN 上的示例。这是一个仅审核已创建的数据库的示例:

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

【讨论】:

  • 嗨 StuartLC 如何创建登录触发器
  • @Anjali - 欢迎来到 Stackoverflow。您需要发布一个新问题,而不是在旧帖子上提问(在检查以确保您的问题不存在重复项之后) - 像这样的旧问题不会引起太多关注。
【解决方案2】:

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

Print command in DDL trigger

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

http://www.techmixing.com/2018/12/sql-triggers-introduction.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2021-02-01
    • 2021-08-07
    • 2013-11-26
    相关资源
    最近更新 更多