資料遷移與異構系統整合是 DBA 常態工作。SQL Server 2000 內建的 Data Transformation Services (DTS) 提供圖形化精靈,適合一次性或排程匯入;而透過 OPENROWSET、OPENDATASOURCE 等分散式查詢函數,則能在預存程序、觸發器或腳本中即時存取 Access、Excel 資料,實現無縫整合。本文說明兩大主流管道的操作要領與常見坑點。
.mdb 檔案路徑。.dts 檔或排程至 SQL Server Agent 定期執行。Excel 8.0(.xls)或 Excel 12.0(.xlsx)。$(如 [Sheet1$]),命名範圍則直接使用範圍名稱。IMEX=1 強制視為文字。-- 直接查詢 Access 資料表
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Data\Source.mdb';'admin';'', TableName)
-- 匯入 Excel 工作表
SELECT * INTO SQLTable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\Data\Source.xls;HDR=YES;IMEX=1',
'SELECT * FROM [Sheet1$]')
-- Access
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\Data\Source.mdb;User ID=admin;Password=')...TableName
-- Excel
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\Data\Source.xls;Extended Properties="Excel 8.0;HDR=YES;IMEX=1"')...[Sheet1$]
EXEC sp_addlinkedserver
@server = 'ACC_LINK',
@provider = 'Microsoft.Jet.OLEDB.4.0',
@datasrc = 'C:\Data\Source.mdb';
-- 使用四部份命名
SELECT * FROM ACC_LINK...TableName
| 現象 | 原因 | 對策 |
|---|---|---|
| 「找不到安裝的 ISAM」 | Jet 4.0 未安裝或 64 位元環境缺少 Provider | 安裝 Access Database Engine 2010/2016 Redistributable (x64) |
| 數值欄位變 NULL | 前 8 列為數字,後出現文字 | 加 IMEX=1 或在登錄 TypeGuessRows=0 |
| 欄位名稱含空白/關鍵字 | SQL 識別碼規則衝突 | 用中括號包裹 [Column Name] |
| 匯入速度極慢 | 逐列 INSERT、無大量複製 | 改用 BULK INSERT 或 DTS 封裝 Fast Load 選項 |
掌握雙管道並依場景切換,即能高效完成 SQL Server 與 Office 系列資料的雙向流動。