SQL Server 透過「連結伺服器」機制配合 OLE DB Provider for ODBC,可實現與 Microsoft Access 資料庫的異構整合。本文記錄在 Windows 2000 Server + SQL Server 2000 + Access 環境下的完整設定與查詢語法。
ACCESSTESTLINK_ACCESSACCESSTEST)User ID=admin;Password=password (Access 預設帳號 admin,無密碼可留空)企業管理器展開連結伺服器 → 資料表,可見 Access 所有資料表 (僅中繼資料)。實際查詢需在查詢分析器執行:
[連結伺服器名稱]...[Access使用者].[資料表名稱]
Access 無結構描述/使用者概念,中間留空:
SELECT * FROM [LINK_ACCESS]...[Customers]
SELECT * FROM [LINK_ACCESS]...[Orders] WHERE OrderDate > '2024-01-01'
SELECT * FROM OPENQUERY(LINK_ACCESS, 'SELECT * FROM Customers WHERE Country = "USA"')
IIf、DLookup)| 問題 | 原因 | 解決方案 |
|---|---|---|
| 「找不到資料表」 | Access 資料表名含空格/特殊字元 | 用方括號括起:[Order Details] |
| 資料型別不符錯誤 | Access Memo/OLE Object 對應問題 | 在 OPENQUERY 中 CAST/CONVERT |
| 更新失敗 | Access 資料表無主鍵/唯一索引 | 加入主鍵或使用獨特索引 |
| 效能極差 | 大量資料跨引擎 JOIN | 先 Pull 到暫存表再本地 JOIN |
-- OPENDATASOURCE 單次查詢
SELECT * FROM OPENDATASOURCE(
'Microsoft.Jet.OLEDB.4.0',
'Data Source="C:\Data\Northwind.mdb";User ID=admin;Password='
)...[Customers]
-- OPENROWSET 替代
SELECT * FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Data\Northwind.mdb';'admin';'',
'SELECT * FROM Customers'
)
Ad Hoc Distributed Queries 伺服器選項需謹慎 (預設關閉)