SQL Server リンク サーバーで Access 2007(.accdb ファイル)を参照するには
SQL Server では、リンク サーバーを利用して Access 2007 のデータベース(.accdb ファイル)を参照することもできます。この場合は、下記サイトから「2007 Office system ドライバ」をダウンロードして、インストールしておきます。
2007 Office system ドライバ: データ接続コンポーネント
http://www.microsoft.com/downloads/details.aspx?FamilyId=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=ja
リンクサーバーの作成では、プロバイダに「Microsoft.ACE.OLEDB.12.0」を指定して、次のように記述します。
-- リンクサーバーを Northwind.accdb ファイルに対して作成 USE master EXEC sp_addlinkedserver @server = N'ACCESS' , @provider=N'Microsoft.ACE.OLEDB.12.0' , @srvproduct=N'Access 2007' , @datasrc=N'C:\Northwind.accdb' go -- 社員テーブルを参照 SELECT * FROM ACCESS...社員
なお、次のエラーが表示された場合は
メッセージ 7399、レベル 16、状態 1、行 1 リンク サーバー "ACCESS" の OLE DB プロバイダ "Microsoft.ACE.OLEDB.12.0" により、 エラーがレポートされました。アクセスが拒否されました。 メッセージ 7301、レベル 16、状態 2、行 1 リンク サーバー "ACCESS" の OLE DB プロバイダ "Microsoft.ACE.OLEDB.12.0" から 必要なインターフェイス ("IID_IDBCreateCommand") を取得できません。
以下を実行することで解決できます。
USE master EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1 EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
これにより、以下のレジストリが設定されます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.インスタンス名\Providers\Microsoft.ACE.OLEDB.12.0<参考 URL>
Microsoft.ACE.oledb.12.0 linked server "(null)" reported an error. Access denied
http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/bb2dc720-f8f9-4b93-b5d1-cfb4f8a8b1cb
sp_addlinkedserver の詳細(ヘルプ)はこちらから
http://msdn.microsoft.com/ja-jp/library/ms190479.aspx