我有一个正常工作的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列之前,这是正常的,TranGLC上的最后一个“左连接”是问题的触发器。如果我再次删除该连接,它可以工作,但我不知道问题出在哪里。
我已经检查了代理上的权限(尽管我不能想象为什么那个表会有不同),我做了许多多余的事情来确保它指向数据库和模式。我已经复制了查询,并在另一个窗口中独立运行它,它工作得很好。我在网上发现的任何东西都对查明问题没有帮助。
更新备注:
我可以发送没有查询的邮件吗?:可以,我甚至可以发送带有查询的电子邮件,直到我将左连接添加到TranGLC。
权限问题?:我在网上也看到了很多常见的原因,这在这里是有意义的。然而,情况似乎并非如此。我看不到对此表的任何特殊权限。它的设置与database>schema中的其他表一样
作业代理用户:这就是我对所有东西的设置/关系感到有点困惑的地方。我在一个配置文件下运行sp,该配置文件在Management>Database邮件下设置,使用基本身份验证和我们的域的电子邮件。这封电子邮件实际上是我们拥有的域用户的电子邮件。我可以尝试为活动用户(我,因为我是管理员)设置它为Windows Auth。
我不清楚的是这是如何在SSAgent中工作的,我看到的大多数内容都是在SSAgent>Properties>Alert系统下设置数据库邮件(这里没有为我们检查启用邮件配置文件),但我不清楚其中的关系。我觉得这完全是为了别的东西,在这里应该无关紧要。
发布于 2017-09-07 02:48:04
从网上的情况来看,一切都指向这个过程中的某种权限问题。
要检查的问题是:您是否能够手动发送电子邮件,即手动运行相同的作业,而不是查询?该表或列是否具有任何特殊权限?如果更改运行作业代理的用户身份,会发生什么情况?
https://stackoverflow.com/questions/46059805
复制相似问题