我如何找出哪个存储过程发送了电子邮件?

时间:2018-07-12 16:26:45

标签: sql-server email stored-procedures sql-server-2014

我们有一封电子邮件要从SQL Server发送给我们,我们想停止。如何确定哪个存储过程正在发送该电子邮件,以便可以修改/禁用它?

我尝试过的

  • 通过sys.all_sql_modules在所有存储过程中搜索电子邮件主题和正文中的单词。

    SELECT *
    FROM sys.all_sql_modules AS asm
    INNER JOIN sys.objects AS o ON o.object_id = asm.object_id
    WHERE asm.definition LIKE '%*[subject/body words]*%'
    
  • 我已经浏览了sysmail_*表,并且已经发现我的电子邮件已发送,但是我没有找到将其追溯到存储过程的方法。

    SELECT TOP 100 * 
    FROM msdb.dbo.sysmail_sentitems AS ss
    WHERE ss.subject LIKE '%keyword%'
    

2 个答案:

答案 0 :(得分:3)

您可以在sys.modules中搜索字符串

  

sp_send_dbmail

然后查看所有匹配。 OTOH您怎么知道它是从PROC发送的?可能是调用sp_send_dbmail的临时查询,代理作业或其他东西。

答案 1 :(得分:1)

我只需创建服务器端跟踪并为textdata使用过滤器,例如'%sp_send_dbmail%'

然后只需运行跟踪1天,然后您就可以确定哪个SP正在发送数据库邮件。这样,您就可以确定是通过存储的proc还是通过临时查询(例如在SSRS报告中?)还是通过工作步骤发送电子邮件。

相关问题