DBF (dBase/Visual FoxPro) 為傳統桌面資料庫格式,與 SQL Server 互轉是常見遷移需求。本文彙整多種方案:OPENROWSET、DTS/匯入導出精靈、驅動程式選擇,並解決常見錯誤。
| 驅動程式 | Provider 字串 | 特點 | 適用場景 |
|---|---|---|---|
| VFP OLE DB | VFPOLEDB.1 | 支援 VFP 完整功能、字元型別對應佳 | VFP 6.0+ 表、需保留 Null/邏輯型別 |
| Visual FoxPro ODBC | MSDASQL + Driver=Microsoft Visual FoxPro Driver | 成熟穩定、廣泛相容 | 通用 DBF/VFP 表 |
| Jet OLE DB | Microsoft.Jet.OLEDB.4.0 + DBase III/IV | Windows 內建、無需額外安裝 | 簡單 DBF、無 VFP 環境 |
-- VFPOLEDB
SELECT * FROM OPENROWSET('VFPOLEDB.1', 'C:\Data\';'admin';'', 'SELECT * FROM Customer');
-- Visual FoxPro ODBC (推薦)
SELECT * FROM OPENROWSET('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=C:\Data',
'SELECT * FROM Customer');
INSERT INTO SQL_Target_Table (Col1, Col2)
SELECT Col1, Col2
FROM OPENROWSET('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=C:\Data',
'SELECT Col1, Col2 FROM Source.DBF');
-- 方式 1:VFPOLEDB (需安裝 VFPOLEDB.msi)
SELECT * INTO SQL_New_Table
FROM OPENROWSET('VFPOLEDB.1', 'C:\Data\';'admin';'', 'SELECT * FROM Source.DBF');
-- 方式 2:Visual FoxPro ODBC (推薦,無需額外安裝)
SELECT * INTO SQL_New_Table
FROM OPENROWSET('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=C:\Data',
'SELECT * FROM Source.DBF');
-- 方式 3:Jet OLE DB (DBase IV)
SELECT * INTO SQL_New_Table
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'DBase IV;HDR=NO;IMEX=2;DATABASE=C:\Data',
'SELECT * FROM Source.dbf');
INSERT INTO OPENROWSET('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=C:\Data',
'SELECT * FROM Target.DBF')
SELECT Col1, Col2 FROM SQL_Source_Table;
「無法從 OLE DB 提供程式 'VFPOLEDB.1' 取得必要介面」
原因:VFPOLEDB 不支援直接 INSERT 寫入。
解決:改用 MSDASQL + Visual FoxPro ODBC 驅動。
「OLE DB 提供程式 'Microsoft.Jet.OLEDB.4.0' 指出該物件中沒有任何欄位」
原因:Jet 的 DBase 驅動對 VFP 表格式支援有限。
解決:優先使用 Visual FoxPro ODBC 驅動。
現象:VFPOLEDB/ODBC 匯入後,VFP 開啟來源 DBF 提示「無法存取檔案」,約 1 分鐘後自動釋放。
原因:連接集區未立即釋放檔案鎖定。
解決:查詢結束後執行 DBCC FREEPROCCACHE 或等待連接逾時;生產環境建議先複製 DBF 檔案再操作。
VFP_Data)D:\Data)VFP_DataC:\Program Files\Microsoft SQL Server\...\Binn 或 Common Files\ODBC\Data Sources,非指定路徑VFP → COPY TO Excel/CSV → SQL Server 匯入。適用於一次性遷移、格式複雜、驅動程式問題難解時的備案。
SQL Server 與 DBF 互轉的關鍵在於選對驅動程式。Visual FoxPro ODBC (MSDASQL) 是通用性最佳的選擇,配合 OPENROWSET 即時查詢或 DTS 批量遷移,能涵蓋 95% 的遷移場景。遇到驅動問題時,Jet OLE DB 或中繼格式為有效備案。