SQL Server 7.0 から Access へリンクをはる

SERVER


リンクサーバ

SQL Server 7.0 から Access のテーブルを使用したい場合には、リンクサーバという機能を利用します。

このリンクサーバを使えば、他の SQL Server へリンクしたり、Oracle などの異なるデータベースを利用することもできるようです。今回は、Microsoft Access 97 のデータベースへリンクしてみることにしました。

Enterprise Manager で、セキュリティ フォルダの中に リンクサーバ という項目があります。そこで右クリックをして [ 新規リンクサーバ ... ] を選択します。すると、リンクサーバを登録するためのダイアログボックスが現れます。

 

【 リンクサーバ 】 の項目には、SQL Server 側での呼び名を指定します。SQL Server 内ではこの名前をつかってリンク先のテーブルを参照することになります。

Access データベースへ接続するためには、サーバの種類を次のように設定します。

まず、【 プロバイダ名 】 は、Microsoft Jet 4.0 OLE DB Provider に設定します。そして 【 データソース 】 のところで、アクセスデータベースへの絶対パスを指定します。この絶対パスは、SQL Server のあるコンピュータからみた絶対パスになりますので、すこし気をつけましょう。

これだけで大丈夫のようです。Access にリンクする場合、パスワードなしの Admin ユーザにマップしないといけないような話もありましたけど、とりあえずこれだけでうまくいきました。

 

リンクテーブルの使い方

リンクサーバのデータベースを参照するためには、4部構成の完全修飾テーブル名を使用します。

これは、「リンクサーバ名」.「カタログ」.「スキーマ」.「オブジェクト名」 というように、それぞれをピリオドで区切ったものです。たとえば、他の SQL Server へリンクした場合、LINKSERVER.master.dbo.sysdatabases というように、リンクサーバ名.データベース名.所有者名.テーブル名 というようになります。

Microsoft Access の場合、カタログとスキーマがないそうなので、その部分は空のままでつなぐことになります。たとえば、ACCESS_DB という名前のリンクサーバの、ACCESS_TABLE というテーブルを参照する場合は、ACCESS_DB...ACCESS_TABLE というようになります。

よって SELECT 分を使いたい場合は、

SELECT * FROM ACCESS_DB...ACCESS_TABLE

というようになります。また、SQL Server のテーブルと混ぜて使うこともできますので、

SELECT * FROM SQL_TABLE AS [SQLTBL] LEFT JOIN ACCESS_DB...ACCESS_TABLE AS [MDBTBL] ON [SQLTBL].[ID] = [MDBTBL].[ID]

というような使い方もできます。