首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用代理作业执行sp_send_dbmail :无法初始化sqlcmd库

使用代理作业执行sp_send_dbmail :无法初始化sqlcmd库
EN

Stack Overflow用户
提问于 2017-02-28 03:48:33
回答 3查看 3.1K关注 0票数 0

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

代码语言:javascript
复制
Exec msdb.dbo.sp_send_dbmail
    @profile_name = @dbmailProfileName,
    @recipients = @emailRecipents,
    @subject = @subject,
    @body = @body,
    @query = 'Select * From tempdb..##MyTempTable'

当我手动执行此SP时,它工作得很好,但是,当我让我的Server Agent Job运行它时,它会失败,并显示以下错误:

代码语言:javascript
复制
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部分可以很好地工作,但这是无用的,因为我需要通过电子邮件发送数据。

EN

回答 3

Stack Overflow用户

发布于 2017-02-28 23:06:14

我知道这是某种安全问题,但我缺乏DBA技能。然而,我发现了一种变通的解决方案,它并不完全是我想要的,但它是有效的。

编辑作业步骤,以便在我的工作登录名中包含执行方式:

代码语言:javascript
复制
Execute As Login='MyUser'
GO
exec DBNAME.dbo.SPNAME
GO
Revert
GO

由于MyUser可以手动运行此程序,因此我以登录身份执行。

票数 1
EN

Stack Overflow用户

发布于 2019-03-13 00:02:30

然后我得到了同样的错误,在无数次尝试和错误尝试之后,又出现了另一个错误:

代码语言:javascript
复制
  The EXECUTE permission was denied on the object 'xp_sysmail_format_query',
  database 'mssqlsystemresource', schema 'sys'.

我将该用户添加到master数据库中的public角色,然后为该用户添加了以下权限:

代码语言:javascript
复制
  grant execute on xp_sysmail_format_query to [myuser]

数据库邮件似乎依赖于这个存储的进程。这样做之后,电子邮件作业就可以正常工作了。注意:我以指定用户的身份运行作业。

票数 0
EN

Stack Overflow用户

发布于 2017-02-28 04:28:38

您是否尝试过使用@execute_query_database参数?如果此操作不起作用,请尝试将Sql Server代理帐户作为sysadmin添加到Sql Server

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42494500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档