使用 OPENROWSET() 來抓取 Excel 資料時,出現"OLE DB 提供者 Microsoft.ACE.OLEDB.12.0 尚未註冊" 的錯誤訊息,該如何註冊?
開啟伺服器選項 Ad Hoc Distributed Queries
使用 OPENROWSET 時,必須先開啟伺服器選項 Ad Hoc Distributed Queries 才可以使用,沒有開啟的情況下,會出現下面的錯誤訊息
SQL Server 已封鎖元件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 之存取,因為此元件已經由此伺服器的安全性組態關閉。系統管理員可以使用 sp_configure 來啟用 'Ad Hoc Distributed Queries' 的使用。如需有關啟用 'Ad Hoc Distributed Queries' 的詳細資訊,請在《SQL Server 線上叢書》中搜尋 'Ad Hoc Distributed Queries'。有兩種開啟方式
- SSMS 內開啟:Instance => 右鍵 Facset => 介面區組態 => AdHocRemoteQueriesEnable 設為 True
- 利用 T-SQL 語法開啟
sp_configure 'show advanced options' , 1
reconfigure
GO
sp_configure 'Ad Hoc Distributed Queries' , 1
reconfigure
GO
安裝 Microsoft Access Database Engine 2010 可轉散發套件
執行下述語法,就會得到尚未註冊的錯誤訊息
SELECT *
FROM OpenRowSet
(
'Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;HDR=Yes;Database=c:\Demo.xlsx',
'SELECT * FROM [sheet1$]'
)
OLE DB 提供者 "Microsoft.ACE.OLEDB.12.0" 尚未註冊。從 SSMS 上可以看出[提供者]內根本就沒有 Microsoft.ACE.OLEDB.12.0
從 Microsoft Access Database Engine 2010 可轉散發套件 下載並安裝,就可以在 SSMS 內看見 Microsoft.ACE.OLEDB.12.0
再次執行 OPENROWSET T-SQL 語法,就可以把 Excel 資料抓進來囉
存取 Access/Excel 的 OLEDB Provider
- Office2007 之前:Microsoft Jet OLE DB 4.0
- Office2007 開始:Microsoft Office 12.0 Access Database Engine OLE DB Provider(Microsof ACE.OLEDB.12.0)
沒有留言:
張貼留言