10

このExcelシートをテーブルに入れようとしているので、selectステートメントなどを適用して、テーブルをその情報で更新できます。

SELECT * 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
          'Excel 8.0;Database=C:\PB.xlsx',
          'SELECT * FROM [Sheet1$]')

私は64ビットマシンを実行しています。それがどのExcelバージョンであるかわかりません。

エラー:

メッセージ7399、レベル16、状態1、行1リンクサーバー "(null)"のOLEDBプロバイダー"Microsoft.Jet.OLEDB.4.0"がエラーを報告しました。プロバイダーはエラーに関する情報を提供しませんでした。メッセージ7303、レベル16、状態1、行1リンクサーバー "(null)"のOLEDBプロバイダー"Microsoft.Jet.OLEDB.4.0"のデータソースオブジェクトを初期化できません。

Excel12.0に変更すると;

リンクサーバー「(null)」のOLEDBプロバイダー「Microsoft.Jet.OLEDB.4.0」から「インストール可能なISAMが見つかりませんでした」というメッセージが返されました。メッセージ7303、レベル16、状態1、行1リンクサーバー "(null)"のOLEDBプロバイダー"Microsoft.Jet.OLEDB.4.0"のデータソースオブジェクトを初期化できません。

4

3 に答える 3

9

xlsxファイル(Excel 2007-2010)の場合、JETの代わりにACEoledbプロバイダーを使用できます。

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;HDR=YES;Database=C:\PB.xlsx',
    'SELECT * FROM [Sheet1$]');
于 2012-08-23T12:12:42.010 に答える
8

このエラーの原因は5つ考えられます。

  1. ジェットエンジンをサーバーにインストールする必要があります。サーバーにMSOfficeをインストールすると、問題が解決します。
  2. xlsへのパスは、コマンドを実行しているワークステーションではなく、サーバーを基準にしています。
  3. SQL Serverサービスを実行するアカウントには、xlsが存在するフォルダーへの書き込みアクセス権が必要です。考えられる解決策の1つは、サービススタートアップアカウント(管理者など)のtemp=およびtmp=環境変数を(たとえば)c:\ tempに変更してから、c:\tempのフルコントロールをEveryoneに有効にすることです。

4 .. ..

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

5...。

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 0 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 0
GO 

これが機能する理由はわかりません。特に、他のすべての人が1に設定する必要があると言っていることを考えると、ゼロに設定すると、SQL Server2008R232ビットおよびM$Office2007で次のSQLステートメントのトリックを実行しました。

Select * 
into [temp_table$]
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\temp\EXPENDITURE REPORT.xls;HDR=YES;IMEX=1',
'SELECT * FROM [EXPENDITURE SHEET$]')

注:ファイル名とワークシート名の両方にスペースが含まれている例を意図的に使用して、これが実行できることを示しています。

于 2012-09-04T08:18:32.143 に答える
1

私のように、この数年後に他の誰かがつまずいた場合に備えて、これが私のために働いたものです:

OfficeのバージョンがインストールされていないWindows864ビットマシンにSQLServerExpress2012がインストールされたボックスがありました。

これが、私がセットアップしたストアドプロシージャの一部です。

INSERT INTO OPENROWSET ('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=R:\Export Membership Database\Member_Export.xls;',
'SELECT * FROM [combined$]')

(この下のSELECTステートメントの残りの部分)

このエラーが発生しました:

SQL Serverは、このサーバーのセキュリティ構成の一部としてこのコンポーネントがオフになっているため、コンポーネント'Ad HocDistributedQueries'のSTATEMENT'OpenRowset/OpenDatasource'へのアクセスをブロックしました。システム管理者は、sp_configureを使用して、「アドホック分散クエリ」の使用を有効にできます。「アドホック分散クエリ」の有効化の詳細については、SQL ServerBooksOnlineで「アドホック分散クエリ」を検索してください。

構成を変更しました。

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

ストアドプロシージャを再度実行すると、次のエラーが発生します。

OLEDBプロバイダー「Microsoft.ACE.OLEDB.12.0」が登録されていません。

これをインストールする必要があることがわかりました:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16d&displaylang=en

その後、お守りのように働きました!

于 2016-04-06T19:02:53.013 に答える