SQL Server:sp_send_dbmail 在调用存储过程时从不将电子邮件排队
Posted
技术标签:
【中文标题】SQL Server:sp_send_dbmail 在调用存储过程时从不将电子邮件排队【英文标题】:SQL Server : sp_send_dbmail never queues email when calling stored procedure 【发布时间】:2012-11-21 17:20:33 【问题描述】:我有一个 SQL 作业,它设置为运行 sp_send_dbmail
并将存储过程的结果作为 csv 文件附加到电子邮件中。这项工作直到一周半前才开始运行。
完全披露:我在那个时候对存储过程进行了更改。存储过程之前正在查看一个链接服务器中的表,现在正在查看另一个链接服务器中的表。
我能够将代码从工作中取出并在查询窗口中成功运行,我还能够在没有sp_send_dbmail
调用的情况下在查询窗口中成功执行存储过程。此外,作业按计划执行并报告成功,并且我在作业历史记录中没有看到任何错误消息。我在作业中包含了运行该过程并在下面发送邮件的代码:
USE msdb
GO
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SMail',
@recipients = 'xxxx@example.com',
@query = 'EXEC [REP01].[Mktg_Reporting].[dbo].DailyC2C',
@subject = 'Daily Call History',
@query_result_separator=',',
@query_result_no_padding=1,
@query_result_header=0,
@attach_query_result_as_file = 1,
@exclude_query_output=1,
@query_attachment_filename='Calls.csv';
自创建作业以来,我没有更改任何此代码,我只是在存储过程中进行了更改,以便它查看不同的链接数据源。感谢您提供任何形式的帮助。
编辑:我还检查了sysmail_mailitems
表,每次手动运行作业时都没有发现当天排队的消息,想确保我包含了该详细信息。
【问题讨论】:
两个链接服务器有什么区别?它们都是 SQL Server 还是其他东西?链接服务器上的权限是否相同? 作业运行所在的服务器和链接服务器都是 SQL 服务器。我相信这项工作是由 NT AUTHORITY\SYSTEM 执行的,它在两台服务器上具有相同的权限。 刚刚在我原来的回复后再次检查,NT AUTHORITY\SYSTEM 用户实际上并没有在链接服务器上具有适当的权限。谢谢你指点我! 【参考方案1】:我只是稍微深入研究了一下,Pondlife 在权限问题上走在了正确的轨道上。在我最初回复他之后,我看了更深一点,并意识到 NT AUTHORITY\SYSTEM 用户没有设置为正确访问链接服务器。我已经解决了这个问题。
【讨论】:
以上是关于SQL Server:sp_send_dbmail 在调用存储过程时从不将电子邮件排队的主要内容,如果未能解决你的问题,请参考以下文章
使用 SQL Server sp_send_dbmail 从 java 发送电子邮件
SQL Server 2005 sp_send_dbmail出现Internal error at FormatRowset (Reason: Not enough storage is availa
SQL Server 使用触发器(trigger)发送电子邮件
SQL 发送邮件msdb.dbo.sp_send_dbmail