Access 是檔案型資料庫,原生不支援跨伺服器存取。透過 SQL Server 的連結伺服器功能,我們可以將分散在不同位置的 Access 資料庫(.mdb/.accdb)整合至 SQL Server 環境,進而實現異構資料庫(如 Oracle、其他 SQL Server 實例)的互聯,支援分散式查詢、更新、命令與交易。
可透過「企業管理員」圖形介面,或執行系統預存程序 sp_addlinkedserver 快速建立。語法如下:
sp_addlinkedserver
@server = '連結伺服器名稱',
@srvproduct = '產品名稱',
@provider = 'Microsoft.Jet.OLEDB.4.0',
@datasrc = 'Access資料庫完整路徑與檔名';
Microsoft.Jet.OLEDB.4.0 作為 OLE DB 提供者。範例: 建立名為 Anna 的連結伺服器,連接 E:\我的文件\DOS.mdb:
EXEC sp_addlinkedserver
'Anna', 'Access 2000', 'Microsoft.Jet.OLEDB.4.0', 'E:\我的文件\DOS.mdb';
同樣可用 GUI 或 sp_addlinkedsrvlogin 設定。語法:
sp_addlinkedsrvlogin
@rmtsrvname = '連結伺服器名稱',
@useself = FALSE,
@locallogin = 'SQL Server 登入帳號',
@rmtuser = 'Access 使用者名稱',
@rmtpassword = 'Access 密碼';
非安全性資料庫(預設 Admin 無密碼):
EXEC sp_addlinkedsrvlogin 'mytest', FALSE, 'sa', 'admin', NULL;
安全性資料庫(需工作群組資訊檔 .mdw):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\SystemDB 設定工作群組資訊檔完整路徑。EXEC sp_addlinkedsrvlogin 'mytest', FALSE, 'sa', '[AccessUser]', '[AccessPwd]';
在「SQL 查詢分析器」中執行分散式查詢。Access 無目錄與結構描述概念,故使用四部分命名法 [連結伺服器]...[資料表名]:
SELECT * FROM mytest...articles;
-- 或使用 OPENQUERY
SELECT * FROM OPENQUERY(mytest, 'SELECT * FROM articles');
將測試查詢封裝為預存程序,供 ASP/ASP.NET 應用程式呼叫,或直接在應用程式中使用上述分散式查詢語法,發揮連結伺服器的最大彈性與實用性。