iT邦幫忙

0

【已解決】SQL Agent 工作排程 無法執行 OPENROWSET

各位大師.前輩,

我有一個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)

allenlwh iT邦好手 1 級 ‧ 2020-10-07 14:33:05 檢舉
解決方式:在SQL Server本機上寫一個bat,在bat內使用sqlcmd 來執行,將這個bat加入工作排程器

2 個回答

2
rogeryao
iT邦高手 1 級 ‧ 2020-10-07 12:57:43

直接執行StoredProcedure 與 Agent排程工作使用的權限不同,
可能是放置 Excel 檔案的目錄權限問題,請參閱 :
使用OpenRowset、OpenDataSource 查詢EXCEL

SQL SERVER – Cannot initialize the data source object of OLE DB provider “Microsoft.ACE.OLEDB.12.0” for linked server

allenlwh iT邦好手 1 級 ‧ 2020-10-07 14:23:07 檢舉

1.沒找到那個路徑
2.使用者已擁有本機最高權限了
謝謝

sam0407 iT邦高手 1 級 ‧ 2020-10-08 11:17:57 檢舉

allenlwh所謂使用者是啟動SQL Server Agent服務的帳號嗎?我下方的回應有說明

1
sam0407
iT邦高手 1 級 ‧ 2020-10-08 11:14:27

個人經驗:如果手動執行OK,但使用Agent排程執行時出問題,大多是權限問題(如樓上rogeryao大所述)

您確認下"服務"裡-->SQL Server Agent-->內容-->登入(如下圖),看一下是用那個帳號啟動服務的?這個帳號是否有權限讀取C:\下的資料?
https://ithelp.ithome.com.tw/upload/images/20201008/20012665RwoxTRUd5p.png

allenlwh iT邦好手 1 級 ‧ 2020-10-08 11:47:27 檢舉

他是NT Service\SQLSERVERAGENT。
當我在C下面要開權限,在選取本機使用者時,找不到這個帳戶。

https://ithelp.ithome.com.tw/upload/images/20201008/20033493FHAKQOXecK.jpg

sam0407 iT邦高手 1 級 ‧ 2020-10-08 11:54:26 檢舉

NT Service\SQLSERVERAGENT是裝SQL Server時建的預設帳號,這個帳戶預設情況下不會有讀取C:\的權限,請換個有權限的帳號並重啟服務試試!

allenlwh iT邦好手 1 級 ‧ 2020-10-08 21:47:58 檢舉

sam0407了解,我再試試,謝謝。

我要發表回答

立即登入回答