標籤:
作業系統Windows Server 2008 X64,資料庫SQL Server 2008 X64,Office 2007(好像只有32位),在預存程序執行OpenDatasource匯入Access資料的時候遇到問題了,Oledb 4.0已經不被支援,以下是遇到的若干錯誤提示:
因為 OLE DB 提供者 ‘Microsoft.Jet.OLEDB.4.0‘ 配置為在單一執行緒 Apartment模式下運行,所以該提供者無法用於分散式查詢。無法建立連結的伺服器 "(null)" 的 OLE DB 提供者 "Microsoft.Ace.OLEDB.12.0" 的執行個體。因為 OLE DB 提供者 ‘Microsoft.Ace.OLEDB.12.0‘ 配置為在單一執行緒 Apartment模式下運行,所以該提供者無法用於分散式查詢 。
解決方案是安裝Office 2010 64位版, 網上有很多下載,然後下載Microsoft Access Database Engine 2010 的X64版本,網上也有下載,兩者缺一不可。
然後改一下OpenDatasource參數,將 Microsoft.Jet.OLEDB.4.0 改為 Microsoft.ACE.OLEDB.12.0,大功告成。
貼上預存程序部分代碼:
--開啟匯入功能
exec sp_configure ‘show advanced options‘,1
reconfigure
exec sp_configure ‘Ad Hoc Distributed Queries‘,1
reconfigure
--允許在進程中使用ACE.OLEDB.12
EXEC master.dbo.sp_MSset_oledb_prop N‘Microsoft.ACE.OLEDB.12.0‘, N‘AllowInProcess‘, 1
--允許動態參數
EXEC master.dbo.sp_MSset_oledb_prop N‘Microsoft.ACE.OLEDB.12.0‘, N‘DynamicParameters‘, 1
--匯入暫存資料表
exec (‘insert into jihua(id,[批次號],Right(‘‘‘+ @filepath +‘‘‘,charindex(‘‘\‘‘,REVERSE(‘‘‘+ @filepath +‘‘‘))-1),getdate() FROM OPENDATASOURCE (‘‘Microsoft.ACE.OLEDB.12.0‘‘, ‘‘Data Source=‘[email protected]+‘;User ID=Admin;Password=‘‘ )...計劃匯總表‘)
--注意這裡,要先關閉外圍的設定,然後再關閉進階選項
exec sp_configure‘Ad Hoc Distributed Queries‘,0
reconfigure
exec sp_configure‘show advanced options‘,0
reconfigure
--關閉ACE.OLEDB.12的選項
EXEC master.dbo.sp_MSset_oledb_prop N‘Microsoft.ACE.OLEDB.12.0‘, N‘AllowInProcess‘, 0
EXEC master.dbo.sp_MSset_oledb_prop N‘Microsoft.ACE.OLEDB.12.0‘, N‘DynamicParameters‘, 0
解決SQL Server 2008 64位系統無法匯入Access/Excel的問題 2012/08/01