環境:Windows Server 2008 x64、SQL Server 2008 x64、Office 2007 (32位元)。嘗試在預存程序中使用 OPENDATASOURCE 導入 Access 資料時發生錯誤,主要原因是 OLE DB 4.0 不再受支援於 64 位元環境。
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 為伺服器端可存取的完整路徑。此方案經實測可解決 64 位元 SQL Server 2008 導入 Access/Excel 的相容性問題,關鍵在於安裝 64 位元 ACE 引擎並正確設定 Provider 字串。