我正在执行一个动态构建从多个数据库收集的全局数据表的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