可以执行过程但是会导致程序错误吗?

时间:2012-11-06 16:56:39

标签: sql-server sql-server-2008 tsql

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

  

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

使用我的程序存储的数据库,TSQL语句'EXEC myprocedure'在作业中有一步。有谁知道可能导致此错误的原因?

更新

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

相关问题