加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 为什么sp_send_dbmail在SQL Agent作业中失败?

发布时间:2020-12-12 16:50:10 所属栏目:MsSql教程 来源:网络整理
导读:我有一个简单的查询,当帐户被禁用超过30天时,我会向我们的AD帐户管理员发送电子邮件通知.当我自己运行它,以SA身份登录时,它可以正常工作,但在SQL Server代理作业中运行时会失败. 这是查询,替换了特定于业务的项目和对象名称: DECLARE @QueryString varchar(m
我有一个简单的查询,当帐户被禁用超过30天时,我会向我们的AD帐户管理员发送电子邮件通知.当我自己运行它,以SA身份登录时,它可以正常工作,但在SQL Server代理作业中运行时会失败.

这是查询,替换了特定于业务的项目和对象名称:

DECLARE @QueryString varchar(max)
SET @QueryString = 'Select TrackingTable.Username FROM dbName.Schema.TrackingTable inner join dbName.Schema.viewName on DisabledAccounts.username = viewName.username WHERE DATEDIFF(dd,DateDisabled,GETDATE()) > 25 AND viewName.OU = ''InactiveAccounts'''
EXEC msdb.dbo.sp_send_dbmail  @profile_name = 'Profile',@body = 'This is the body text. Nothing interesting here.
',@recipients = 'me@mydomain.tld',@subject='Account status update',@query = @QueryString,@importance = 'High'

当我将其作为SA运行时,将发送消息.在SQL Server代理作业中,我收到此错误:

Executed as user: DOMAINMemberOfDomainAdmins. Error formatting query,probably invalid parameters [SQLSTATE 42000] (Error 22050).  The step failed.

作业执行的域用户在msdb上分配了db_owner角色,并为附加到消息的查询分配了数据库.它在两个数据库上的默认架构都是dbo.

它还在服务器上分配了sysadmin角色,并且是msdb上DatabaseMailuserRole的成员.它还具有对查询使用的数据库邮件配置文件的私有和公共访问权限.

我在网上看过几十个相同问题的例子,但我已经采取了在我看到的例子中解决这个问题的步骤.我还能尝试什么?

解决方法

我今天早上想通了.问题出在DATEADD函数上.当它在EXECUTE语句中(这是SQL Server代理程序作业将如何运行它)时,间隔必须是特定的datepart(day),而不是其中一个标记(“dd”).

所以,这个函数:DATEDIFF(dd,GETDATE())

需要更像这样:DATEDIFF(day,GETDATE())

那里有多次调用该函数,但你明白了.

以下是我弄清楚的方法:我在SQL Server Management Studio脚本中将作业作为新查询编辑器文档中的CREATE脚本.一旦我找到了我试图运行的步骤,我就把它复制出来了.多汁的东西看起来像这样:

@command = N'[我的查询]’

我将该组行复制到一个新窗口,并为命令变量添加了一个DECLARE.

最后,我使用了EXECUTE(@command)AS USER ='[作业运行的用户]’来查看会发生什么.以这种方式运行查询,我得到了比我从日志中获得的更详细的错误消息.

我现在已经纠正了,而且工作完美无缺.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读