web-dev-qa-db-ja.com

OpenRowSet-分散クエリに使用するOLE DBプロバイダーの設定方法

データを含むExcelファイルがあり、Excelファイルに含まれているデータに基づいてデータベースのテーブルを更新したい。

そのためには、OpenRowSetコマンドを使用します。しかし、ExcelデータからSELECTを取得したい場合でも、以下のエラーが発生します。

SELECT  exl.*
INTO #myExcelData
FROM OPENROWSET ('Microsoft.Ace.OLEDB.12.0'
,'Excel 12.0; Database=C:\Dev\ExcelDataImport.xlsx; Extended Properties=''Excel 12.0;HDR=NO;IMEX=1'
,'SELECT * FROM [Sheet1$]') AS exl
GO

OLE DB provider 'Microsoft.ACE.OLEDB.12.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.

エラーメッセージが言うように、私はMicrosoft.ACE.OLEDB.12.0は、OpenRowSetのような分散クエリに使用できるようにします。そのために、以下のcommondを実行しました。

exec sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE

上記のコマンドからの出力メッセージ:

Configuration option 'Ad Hoc Distributed Queries' changed from 1 to 1. Run the RECONFIGURE statement to install.

しかし、それでもOpenRowSetクエリを実行しようとすると同じエラーが発生します。この問題を解決してOpenRowSetを機能させる方法のヒントを教えてください。

私の環境:

SQL Server 2008 R2、Excel Professional Plus 10(32ビット)

また、次のようにリンクサーバーにあるプロバイダー:enter image description here

前もって感謝します。

4
Sky

インストール後、エージェントとサーバーサービスを再起動します。

SQL ServerでOLEDBドライバーを有効にする

EXEC sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;  
GO  
RECONFIGURE;  
GO
3
nitu bansal

SSISの使用をお勧めします。パッケージを保存して後続の実行に再利用できる柔軟性があるため、SQLエージェントジョブを使用してスケジュールすることもできます。

また、アドホック分散クエリを実行できるようにする(クエリを1に変更する)ことで、セキュリティが低下しています。

私はあなたが投稿したのとまったく同じクエリを試しましたが、それは私にとってはうまくいきます。

sp_configure 'Ad Hoc Distributed Queries',1
go
reconfigure with override
go
SELECT  exl.*
INTO #myExcelData
FROM OPENROWSET ('Microsoft.Ace.OLEDB.12.0'
,'Excel 12.0; Database=C:\Documents and Settings\kin\Desktop\test_kin.xlsx; Extended Properties=''Excel 12.0;HDR=NO;IMEX=1'
,'SELECT * FROM [Sheet1$]') AS exl
GO

select * from #myExcelData

enter image description here

1
Kin Shah

'Kin'の回答に追加し、32ビットのオフィス製品を実行していて、オフィス製品(Excel)への通信に使用されるAccessDatabaseEngineの32ビットバージョンがある場合は、この問題が発生する可能性があります。ただし、64ビットに変更すると、これは表示されなくなります。 (そして、エースはあなたのリンクされたサーバーに現れます。)

0
Slow Learner