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

Sql server 如何找出哪个存储过程发送了电子邮件?,sql-server,email,stored-procedures,sql-server-2014,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/

我们有一封从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%'
    

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

发送电子邮件


然后看看所有的点击率。OTOH你怎么知道它是从一个PROC发送的?它可以是调用sp_send_dbmail的即席查询,也可以是代理作业或其他内容。

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

发送电子邮件


然后看看所有的点击率。OTOH你怎么知道它是从一个PROC发送的?它可能是一个调用sp_send_dbmail的特殊查询,或者是一个代理作业,或者是其他的东西。

我只需要创建一个服务器端跟踪,并为
textdata
创建一个过滤器,比如“%sp_send_dbmail%”


然后只需运行跟踪1天,就可以确定哪个SP正在发送db邮件。这样,您就可以确定电子邮件是通过存储过程发送的,还是通过特殊查询发送的(如在SSRS报告中?),或者是从作业步骤发送的。

我只需创建一个服务器端跟踪,并使用
文本数据的过滤器,如“%sp\u send\u dbmail%”


然后只需运行跟踪1天,就可以确定哪个SP正在发送db邮件。这样,您就可以确定电子邮件是通过存储过程发送的,还是通过特殊查询(如在SSRS报告中?)发送的,还是通过作业步骤发送的。

我认为您无法做到这一点。你必须在邮件中写上一些东西来指明它的来源。一旦它被发送,系统就不在乎它来自哪里。你第一次尝试的结果是什么?是太多了以至于无法筛选还是没有返回任何内容?@Dave.Gugg我在所有的sql模块中都没有得到结果。你可以抓取Redgate的sql搜索。这是一个免费的工具,可以搜索你所有的数据库并找到主题/正文词,如果它确实在SP中的话。我经常使用它。我认为你不能。你必须在邮件中写上一些东西来指明它的来源。一旦它被发送,系统就不在乎它来自哪里。你第一次尝试的结果是什么?是太多了以至于无法筛选还是没有返回任何内容?@Dave.Gugg我在所有的sql模块中都没有得到结果。你可以抓取Redgate的sql搜索。这是一个免费的工具,可以搜索你所有的数据库,找到主题/主体词,如果它确实在SP中的话。我经常使用它。