2017-09-05 113 views
0

我有一個工作的一個SQL代理作業,但增加了新的後左側加入到dbmail查詢它的失敗。該錯誤是一個我見過各地,很少人似乎有一個答案:sp_send_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最後的「左連接」是這一問題的扳機。如果我再次刪除那個連接,它可以工作,但我無法弄清楚那是什麼問題。

我已經簽上的代理權限(雖然我無法想象爲什麼表將已經做出了改變),我做了很多事情的冗餘,以確保其指向數據庫和架構。我已經複製了查詢並在另一個窗口中獨立運行它,並且它工作正常。我在網上發現的任何東西都有助於指出問題。

UPDATE註釋:

我可以把它無需查詢?:是的,我甚至可以發送與查詢的電子郵件,直到我添加了左聯接到TranGLC。

權限問題?:我也看到了網上很多的常見原因,而這將使意義在這裏。但似乎並非如此。沒有特殊的權限,我可以看到這張表。其設置如表在數據庫中的其他>模式

作業代理用戶:所以這裏是我的一切的設置/關係有點混亂。我正在使用配置文件運行sp,該配置文件是使用基本身份驗證在管理>數據庫郵件下設置的,其中包含我們爲域所提供的電子郵件。這封電子郵件實際上是我們擁有的域用戶的電子郵件。我可以嘗試將它設置爲活動用戶的Windows身份驗證(因爲我是管理員)。

我不清楚的是SSAgent中的工作方式,我所見過的大部分都是爲了在SSAgent>屬性>警報系統(啓用郵件配置文件不在此處爲我們選中)中設置數據庫郵件,不清楚這種關係。我覺得這完全是另一回事,在這裏應該不重要。

+0

當你在包裝上執行存儲過程 – TheGameiswar

+0

同樣的錯誤整個事情會發生什麼。我嘗試在TVF中包裝SQL,並將查詢設置爲select * from dbo.function(),實際上它工作正常,但是我的格式都沒有在csv中生效,因此它無法讀取: – BWoods

回答

0

從網上看起來,一切都指向某個過程中的某種權限問題。

問題,檢查將是:你能夠手動手動,即發送電子郵件運行完全相同的工作,而不是查詢?該表或列是否有特殊的權限?如果更改作業代理運行的用戶會發生什麼情況?

+0

更新了問題以回答您長時間評論:PI可以嘗試使用數據庫郵件的Windows身份驗證來使用我的登錄,而不是作爲測試。 – BWoods