首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2008

SQL Server 2008 64位元系統無法導入 Access/Excel 解決方案

     編輯:SQL Server 2008

問題背景

環境:Windows Server 2008 x64、SQL Server 2008 x64、Office 2007 (32位元)。嘗試在預存程序中使用 OPENDATASOURCE 導入 Access 資料時發生錯誤,主要原因是 OLE DB 4.0 不再受支援於 64 位元環境。

常見錯誤訊息

  • Microsoft.Jet.OLEDB.4.0:配置為單執行緒單元模式,無法用於分散式查詢。
  • Microsoft.ACE.OLEDB.12.0:無法建立連結伺服器實例,或同樣因單執行緒模式被拒。

解決方案

  1. 安裝 Office 2010 64 位元版本(網路可下載)。
  2. 安裝 Microsoft Access Database Engine 2010 x64 版本(兩者缺一不可)。
  3. 修改 OPENDATASOURCE 參數,將 Provider 從 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, [批次號], ...)
       SELECT ... FROM OPENDATASOURCE(''Microsoft.ACE.OLEDB.12.0'',
       ''Data Source=' + @filepath + ';User ID=Admin;Password='')...計劃匯總表');

-- 關閉設定
EXEC sp_configure 'Ad Hoc Distributed Queries', 0; RECONFIGURE;
EXEC sp_configure 'show advanced options', 0; RECONFIGURE;
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;

注意事項

  • 確保檔案路徑 @filepath 為伺服器端可存取的完整路徑。
  • 導入完成後務必關閉分散式查詢與 OLEDB 屬性,降低安全風險。
  • 若仍有問題,檢查防火牆、檔案權限與 ACE 引擎是否正確註冊。

此方案經實測可解決 64 位元 SQL Server 2008 導入 Access/Excel 的相容性問題,關鍵在於安裝 64 位元 ACE 引擎並正確設定 Provider 字串。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved