1

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

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

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
4

2 回答 2

0

您的示例是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
于 2014-01-22T15:01:01.073 回答
0

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

DDL 触发器中的打印命令

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

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

于 2018-12-13T12:53:12.093 回答