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]
というような使い方もできます。