我正在执行一个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: WORKGROUP\MyServer2016$. 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
部分可以正常工作,但由于我需要通过电子邮件发送数据,因此无用。
答案 0 :(得分:0)
我知道这是一种安全问题,但我缺乏DBA技能在这里打败了我。但是,我找到了一个解决方案,它起作用,不完全是我想要的,但它确实有效。
编辑作业步骤以在我的工作登录中包含执行:
Execute As Login='MyUser'
GO
exec DBNAME.dbo.SPNAME
GO
Revert
GO
由于MyUser
可以手动运行此事,因此我执行了登录。
答案 1 :(得分:0)
然后遇到同样的错误,经过多次尝试和错误尝试,又弹出另一个错误:
The EXECUTE permission was denied on the object 'xp_sysmail_format_query',
database 'mssqlsystemresource', schema 'sys'.
我将用户添加到master数据库中的public角色,然后为用户添加了此权限:
grant execute on xp_sysmail_format_query to [myuser]
似乎数据库邮件依赖于此存储的过程。完成此操作后,电子邮件工作正常。注意:我以指定用户身份运行作业。
答案 2 :(得分:-1)
您是否尝试过使用@execute_query_database参数?如果这不起作用,请尝试将Sql Server Agent帐户作为sysadmin添加到Sql Server