我们有一封电子邮件要从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%'
答案 0 :(得分:3)
您可以在sys.modules中搜索字符串
sp_send_dbmail
然后查看所有匹配。 OTOH您怎么知道它是从PROC发送的?可能是调用sp_send_dbmail的临时查询,代理作业或其他东西。
答案 1 :(得分:1)
我只需创建服务器端跟踪并为textdata
使用过滤器,例如'%sp_send_dbmail%'
然后只需运行跟踪1天,然后您就可以确定哪个SP正在发送数据库邮件。这样,您就可以确定是通过存储的proc还是通过临时查询(例如在SSRS报告中?)还是通过工作步骤发送电子邮件。