【问题标题】:Get Procedure name inside ALTER_PROCEDURE DDL Trigger在 ALTER_PROCEDURE DDL 触发器中获取过程名称
【发布时间】:2018-07-05 07:39:20
【问题描述】:

我创建了一个 SQL 触发器,每当我的数据库中的任何存储过程发生更改时,它都会发送电子邮件警报。我可以在电子邮件中包含 SP 的名称吗?如何调用特定的 SP 名称以显示在电子邮件中?

这是我的代码:

ALTER TRIGGER [send_Email_to_User_ALTER]
ON DATABASE--msdb.dbo.[sp_send_dbmail]
AFTER ALTER_PROCEDURE
AS

--BEGIN 
--SET NOCOUNT ON;

EXEC msdb.dbo.[sp_send_dbmail]
@profile_name = 'Test Alert',
@recipients = 'email@outlook.com',
@body = 'A STORED PROCEDURE HAS BEEN ALTERED.'  , 
@subject = 'ALERT System SP Change Notification';  

【问题讨论】:

  • 请更正标签。您的问题的 DBMS 是 MySQL 还是 SQL Server?因为你也指出了 tsql,它是用于 SQL Server 的!
  • Tsql也可以是Sybase。

标签: mysql sql sql-server tsql


【解决方案1】:

试试这个:

ALTER TRIGGER [send_Email_to_User_ALTER] 
ON DATABASE--msdb.dbo.[sp_send_dbmail]
AFTER ALTER_PROCEDURE
AS


--BEGIN 
--SET NOCOUNT ON;
DECLARE @data XML
SET @data = EVENTDATA()      
DECLARE @objName Nvarchar(max)
SET @objName = (SELECT  @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(256)'))

DECLARE @body NVARCHAR(MAX)
SET @body = 'A STORED PROCEDURE HAS BEEN ALTERED.' + @objName 

EXEC msdb.dbo.[sp_send_dbmail]
@profile_name = 'Test Alert',
@recipients = 'email@outlook.com',
@body = @body , 
@subject = 'ALERT System SP Change Notification'; 

【讨论】:

  • 嗨 Vahid 我在“@objName”旁边的“+”号处遇到错误,你能解释一下这是为什么吗?
  • 我得到的错误状态是:'Msg 102, Level 15, State 1, Line 20'+'附近的语法不正确。
  • @SQLGuy 我更新了答案。现在错误已解决
  • @SQLGuy 这样您就可以点赞并将帖子标记为答案:-)
猜你喜欢
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 2015-12-26
相关资源
最近更新 更多