SQL Server リンク サーバーで Excel 2007 ファイル(.xlsx ファイル)を参照するには

SQL Server では、リンク サーバーを利用して Excel 2007 のファイル(.xlsx ファイル)を参照することもできます。この場合は、下記サイトから「2007 Office system ドライバ」をダウンロードして、インストールしておきます。

2007 Office system ドライバ: データ接続コンポーネント
http://www.microsoft.com/downloads/details.aspx?FamilyId=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=ja

リンクサーバーの作成では、Access 2007 のときと同様、プロバイダに「Microsoft.ACE.OLEDB.12.0」を指定し、@provstr に「Excel 12.0」、@datasrc に「xlsx ファイル名」を指定します。

-- リンクサーバーを C:\Shohin.xlsx ファイルに対して作成
USE master
EXEC sp_addlinkedserver 
   @server = N'EXCEL'
 , @provider=N'Microsoft.ACE.OLEDB.12.0'
 , @srvproduct=N'Excel'
 , @provstr=N'Excel 12.0'
 , @datasrc=N'C:\Shohin.xlsx'
go
-- Sheet1 を参照
SELECT * FROM EXCEL...[Sheet1$]

なお、次のエラーが表示された場合は

リンク サーバー "EXCEL" の OLE DB プロバイダ "Microsoft.ACE.OLEDB.12.0" から、
メッセージ "データベースの形式 'C:\Shohin.xlsx' を認識できません。" が返されました。
メッセージ 7303、レベル 16、状態 1、行 2
リンク サーバー "EXCEL" の OLE DB プロバイダ "Microsoft.ACE.OLEDB.12.0" の
データ ソース オブジェクトを初期化できません。

以下を実行することで解決できます(実行後、OS の再起動が必要な場合があります)。

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