sp_send_dbmail错误格式化查询

时间:2017-09-05 16:46:00

标签: sql-server tsql sp-send-dbmail

我有一个正在运行的SQL代理作业,但在向dbmail查询添加新的左联接后它失败了。错误是我一直看到的错误,很少有人似乎有答案:

Msg 22050, Level 16, State 1, Line 0
Error formatting query, probably invalid parameters
Msg 14661, Level 16, State 1, Procedure sp_send_dbmail, Line 517
Query execution failed: Msg 105, Level 15, State 1, Server SQLSRV, Line 34

查询执行失败后的消息往往会改变并选择单词中间的位置作为错误的罪魁祸首。

查询如下:

@Query = 'set nocount on 
USE [Epicor10]
select
  case when VoidOrder = 0 then "Not Void" else "Voided" end as ' + @Column1Name + ',
  case when Approve = 0 then "NA" else "A" end as Approved, 
   case when poheader.Confirmed = 0 then "UC" else "C" end as Confirmed, 
    POHeader.PONum, 
    podetail.POLine,
   pr.PORelNum,
   TG.GLAccount,
   convert(nvarchar,REPLACE(REPLACE(REPLACE(REPLACE( podetail.PartNum, CHAR(13), ""), CHAR(10), " "), CHAR(9), " "), ",", " "))  PartNum,
    convert(nvarchar,REPLACE(REPLACE(REPLACE(REPLACE( podetail.LineDesc, CHAR(13), ""), CHAR(10), " "), CHAR(9), " "), ",", " ")) LineDesc,
   OrderQty,
     ISNULL(CONVERT(nVarChar(max), pr.DueDate, 121), NULL) RelDueDate,
  ISNULL(CONVERT(nVarChar(max), PODetail.DueDate, 121), NULL)   LineDueDate,
   pr.ReceivedQty,
   pr.RelQty,
   (pr.RelQty - pr.ReceivedQty) BalanceDue,
   EntryPerson, 
   ShipName, 
   BuyerID, 
   POHeader.VendorNum, 
   Vendor.VendorID,
 convert(nvarchar(max),REPLACE(REPLACE(REPLACE(REPLACE(Vendor.Name, CHAR(13), ""), CHAR(10), " "), CHAR(9), " "), ",", "")) Name,
 REPLACE(REPLACE(REPLACE(REPLACE(ISNULL(CONVERT(nVarChar(max),ApprovedDate, 121), NULL), CHAR(13), ""), CHAR(10), " "), CHAR(9), " "), ",", "")   LineApprovedDate,
    ISNULL(CONVERT(nVarChar(max),OrderDate, 121), NULL) OrderDate,
 convert(nvarchar,REPLACE(REPLACE(REPLACE(case when ApprovedBy = "username" then "usersname" else ApprovedBy End, CHAR(13), ""), CHAR(10), " "), CHAR(9), " ")) ApprovedBy
 from [Epicor10].[Erp].[POHeader] 
inner join [Epicor10].[Erp].Vendor on POHeader.VendorNum = Vendor.VendorNum
left join  [Epicor10].[Erp].PODetail on poheader.company = podetail.company and poheader.PONum = podetail.PONUM
left join [Epicor10].[Erp].PORel pr on PODetail.Company = pr.company and PODetail.ponum = pr.PONum and PODetail.poline = pr.POLine
left join [Epicor10].[Erp].TranGLC TG on TG.Key1 = pr.PONum and TG.Key2 = pr.POLine and TG.Key3 = pr.PORelNum and TG.RelatedToFile = "PORel"
    where POHeader.OpenOrder = 1 and OrderDate >= "2016-7-1" and OpenLine = 1 and VoidLine = 0 and VoidRelease = 0 and OpenRelease = 1
    order by PONum, POLine, PORelNum'

现在这个工作并且发送正常,直到我被要求添加GLAccount列,最后一个' Left Join'在TranGLC上是问题的触发器。如果我再次删除该联接,它会起作用,但我无法弄清楚问题是什么。

我已经检查了代理的权限(虽然我无法想象为什么这个表会产生影响),但我做了很多多余的事情以确保其指向数据库和架构。我已经复制了查询并在另一个窗口中独立运行它并且工作正常。我在网上找到的任何内容都没有帮助查明问题。

评论更新:

我可以在没有查询的情况下发送吗?:是的,我甚至可以发送带有查询的电子邮件,直到我将左连接添加到TranGLC。

权限问题?:我也在网上看到了很多常见原因,这在这里有意义。但事实并非如此。我可以看到这个表没有特殊权限。它的设置类似于数据库中的其余表> schema

工作代理用户:所以我在这里对所有事情的设置/关系感到有些困惑。我在一个配置文件下运行sp,该配置文件在管理>数据库邮件下使用基本身份验证设置,我们为我们的域提供了一封电子邮件。此电子邮件实际上是我们拥有的域用户的电子邮件。我可以尝试将其设置为活动用户的Windows Auth(我,因为我是管理员)。

我不清楚的是SSAgent中的工作原理,我所看到的大部分内容都是在SSAgent下设置数据库邮件>属性>警报系统(此处未检查启用邮件配置文件)但我不清楚这种关系。我觉得这完全是另一回事,而且不应该在这里。

1 个答案:

答案 0 :(得分:0)

从网上看,一切都指向过程中某处的某种权限问题。

要检查的问题是:您是否能够手动发送电子邮件,即手动运行相同的确切作业,而不是查询?该表或列是否具有任何特殊权限?如果更改作业代理运行的用户会发生什么?