用代理作业执行SP_SEND_DBMAIL:无法初始化SQLCMD库



我正在执行一个动态构建从多个数据库收集的全局数据表的SP。在此SP的末尾是这条代码:

Exec msdb.dbo.sp_send_dbmail
    @profile_name = @dbmailProfileName,
    @recipients = @emailRecipents,
    @subject = @subject,
    @body = @body,
    @query = 'Select * From tempdb..##MyTempTable'

当我手动执行它时,此SP可以很好地工作,但是,当我让我的服务器代理作业运行它时,它会在以下错误中失败:

Message
Executed as user: WORKGROUPMyServer2016$. Failed to initialize sqlcmd library with error number -2147467259. [SQLSTATE 42000] (Error 22050)  Failed to initialize sqlcmd library with error number -2147467259. [SQLSTATE 42000] (Error 22050).  The step failed.

评论SP的@query部分可以正常工作,但这是没有用的,因为我需要电子邮件。

我知道这是某种安全问题,但是我缺乏DBA技能在这里击败了我。但是,我找到了一种解决方法,该解决方案不正常,而不是我想要的,但它起作用。

编辑工作步骤,以将执行时间包括在我的工作登录中:

Execute As Login='MyUser'
GO
exec DBNAME.dbo.SPNAME
GO
Revert
GO

由于MyUser可以手动运行此操作,因此我执行为登录。

我遇到了同样的错误,经过无数次反复尝试,弹出了另一个错误:

  The EXECUTE permission was denied on the object 'xp_sysmail_format_query',
  database 'mssqlsystemresource', schema 'sys'.

我将用户添加到主数据库中的公共角色中,然后为用户添加了此权限:

  grant execute on xp_sysmail_format_query to [myuser]

似乎数据库邮件依赖于此存储的Proc。执行此操作后,电子邮件作业正常工作。注意:我以指定用户的身份运行该作业。

您是否尝试使用@execute_query_database参数?如果那不起作用,请尝试将SQL Server Agent帐户添加到SQL Server中,作为Sysadmin

相关内容

  • 没有找到相关文章

最新更新