各位大師.前輩,
我有一個StoredProcedure,主要是呼叫一個Excel檔案來做處理。
Select wo
FROM OPENROWSET
('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\FORMAIL.xlsx', [formail$])
在 ManagementStudio 裡面直接執行StoredProcedure沒有問題。
我想要這個StoredProcedure可以依排定時間執行,所以新增了一個Agent排程工作,執行時發生錯誤。
訊息
Executed as user: NT SERVICE\SQLSERVERAGENT. Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)". [SQLSTATE 42000] (Error 7303) OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "無法指出的錯誤". [SQLSTATE 01000] (Error 7412). The step failed.
SQL版本:MS-SQL2012 SP4(11.0.7001.0) - Microsoft SQL Server Standard (64-bit)
直接執行StoredProcedure 與 Agent排程工作使用的權限不同,
可能是放置 Excel 檔案的目錄權限問題,請參閱 :
使用OpenRowset、OpenDataSource 查詢EXCEL
個人經驗:如果手動執行OK,但使用Agent排程執行時出問題,大多是權限問題(如樓上rogeryao大所述)
您確認下"服務"裡-->SQL Server Agent-->內容-->登入(如下圖),看一下是用那個帳號啟動服務的?這個帳號是否有權限讀取C:\下的資料?
他是NT Service\SQLSERVERAGENT。
當我在C下面要開權限,在選取本機使用者時,找不到這個帳戶。
NT Service\SQLSERVERAGENT是裝SQL Server時建的預設帳號,這個帳戶預設情況下不會有讀取C:\的權限,請換個有權限的帳號並重啟服務試試!
sam0407了解,我再試試,謝謝。