0

我有一个从我的数据库中提取数据并使用 MSDB.DBO.sp_send_dbmail 发送电子邮件的程序。当我使用“EXEC myprocedure”时,该过程本身运行顺利。但是当我为该过程设置作业时,作业失败并出现以下错误

'错误格式化查询,可能是无效参数 [SQLState 42000](错误 22050)。步骤失败'

TSQL 语句“EXEC myprocedure”的工作有一个步骤,使用存储我的过程的数据库。有谁知道可能导致此错误的原因?

更新

我已经缩小了问题的范围。这与我使用的 Exchange 服务器有关。我在数据库邮件的帐户配置向导下使用域地址(即 mail.mycompany.com)作为“服务器名称”。我无法使用此域地址向列表服务器和外部用户发送电子邮件。我与我们的 Exchange 人员交谈,他建议使用其中一台邮件服务器的实际 IP 地址(即 10.123.53.53)。这解决了 listservs 和外部用户的问题,但是现在当我使用作业运行我的过程时,我无法发送电子邮件(当我手动运行它时,过程本身可以正确执行)。有谁知道我需要更改 Exchange 服务器上的哪些标准来解决此问题?

4

2 回答 2

0

这就像是一个权限问题。从给出的信息中无法准确指定问题所在的权限,但 TSQL 作业步骤将在服务器代理服务帐户的上下文中运行,因此请确保该帐户对用于构建的表具有 SELECT 权限查询,然后确保它对您在数据库邮件中使用的配置文件具有权限。

于 2012-11-07T07:15:16.503 回答
0

问题出在 sp_send_dbmail 使用的 @query 参数上。由于某种原因,我的 SQL Server 代理帐户(它是域管理员)被拒绝访问以使用带有 @query 参数的 sp_send_dbmail。我最终完全删除了@query 参数,并将所有内容都放在了@body 参数中。@body 参数变成了常规文本和 SELECT 查询返回的内容的串联。

于 2012-11-13T21:34:59.693 回答