我想创建一个触发器,该触发器会给我发送电子邮件的名称。每当创建数据库时,我都应该收到一封电子邮件。请帮助。
我尝试了以下代码只是为了返回打印语句,但这不起作用:
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
您的示例是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
您的触发代码正常工作,除了您需要评论删除触发代码或删除drop触发代码,如下屏幕截图所示。
ddl触发器中的打印命令
在
上阅读有关SQL触发的更多信息http://www.techmixing.com/2018/12/sql-triggers-introduction.html