5

SQL Server 2008 r2 64 ビットで Excel ファイルを開こうとすると、次のエラーが発生します。

Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" 
reported an error. The provider did not give any information about the error.
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider 
"Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

次のクエリを使用しています。

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; 
HDR=NO; IMEX=1; Database=\\filepath\filename.xlsx', 'SELECT * FROM [Sheet1$]')

面白いことに、DBA は問題なく実行できます。次のクエリを実行して実行しました。

sp_configure 'Show Advanced Options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO

それを実行するアカウントには、sa アクセス権があるようです。この問題の原因は何ですか?

4

4 に答える 4

5

Philipが言ったように...まずxp_cmdshellの実行を確認してください。権限の問題が原因で実行されていない場合は、最初に実行してこのオプションを再構成します

SP_CONFIGURE 'XP_CMDSHELL',1
GO             
RECONFIGURE

この後、次のコマンドを実行して、ACE ドライバーの InProcess 機能に対するリンク サーバーのアクセス許可を有効にします。

USE [master]
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO

EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
GO

次の一連のコマンドを実行します。

sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE

エラーが発生した場合は、各コマンドを個別に実行します。最後に、以下のコマンドを実行して、すべての Excel データを SQL サーバーにインポートします。

SELECT * INTO TargetTableName FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                         'Excel 12.0;Database=FilePath\fileName.xlsx;HDR=YES',
                         'SELECT * FROM [sheetName$]')

xls の場合は、ACE の代わりに Jet Driver を使用する必要があることに注意してください。また、このクエリを実行する前に TargetTableName が存在していてはなりません。ハッピーコーディング:)

于 2013-11-06T20:53:00.200 に答える
4

(テストとして) Excel ファイルを SQL Server C:\ ドライブにコピーし、そのパスに対してクエリを実行してみましたか?

サーバーにアクセスし、エクスプローラー/実行ダイアログで次のパスを開くとどうなりますか: \filepath\filename.xlsx ?

次のクエリを実行できますか: exec master..xp_cmdshell 'dir '\filepath\filename.xlsx' ?

これは、それがネットワーク権限の問題であるかどうか、またはアカウントに分散クエリを使用する権限があるかどうかを判断するのに役立ちます。

私の推測では、DBA が実行できるため、これは間違いなく権利/許可の問題です。

于 2013-04-05T08:52:56.300 に答える