SQL Server 2008 R2 64ビットDeveloper's Editionをマシンにインストールしています。
Microsoft Office 2010 Professional 32ビット。
ExcelシートからSQLサーバーデータベースにExcelデータをインポートしようとしています。これを行うために次のクエリを使用しました。
クエリ
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\Files\BlueFile.xlsx;IMEX=1',
'SELECT * FROM [Sheet1$]')
SQLサーバーがセキュリティ対策としてこの機能をデフォルトで無効にしていることを理解していますが、次のステートメントを実行して有効にしました。
構成
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
エラーメッセージ
しかし、selectステートメントを実行してExcelシートからデータを取得するたびに、次のエラーが発生します。
メッセージ7308、レベル16、状態1、行1 OLE DBプロバイダー
プロバイダーはシングルスレッドアパートメントモードで実行するように構成されているため、 'Microsoft.Jet.OLEDB.4.0'は分散クエリには使用できません。
Markがコメントで述べたように、ドライバーセット間でビットレベルの不一致が発生しています。 64ビット版のOffice(特にこの場合はExcel)をインストールするか、32ビット版のSQL Serverをインストールして、そのインスタンスにデータをインポートする必要があります。