5

MSSQL SERVER 2008 のデータを Excel からエクスポートしたいのですが、エラーが発生しました

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" 
returned message "Bookmark is invalid.".

Msg 7343, Level 16, State 2, Line 1

The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" 
could not INSERT INTO table "[Microsoft.ACE.OLEDB.12.0]". 

エクスポート時の私の Excel ファイル (ファイルは 97-2003 形式で保存されます) サーバー上の Excel ファイル バージョン 97-2003

それは私の質問です SQL クエリ

エラーが発生する理由を教えてください。私は何をする必要がありますか?

4

5 に答える 5

9

この問題に何度も苦労した後、次の解決策を見つけました。

  1. 64 ビット サーバーおよびボックスでは、最初にすべての 32 ビット Microsoft Office アプリケーションおよびインスタンスをアンインストールする必要があります (Access 2007 インストール、Office 10 32 ビットなど)。そうしないと、新しい 64 ビット Microsoft Access データベース エンジン 2010 再頒布可能コンポーネントをインストールできません。はい、それは頭痛の種ですが、64 ビット マシンで実行する必要がある JET エンジン コンポーネントの新しい代替品をインストールする唯一の方法を見つけました。
  2. Microsoft から新しいコンポーネントをダウンロードしてインストールします
    • これにより、リンク サーバー、OPENROWSET Excel ファイルなどをセットアップするために必要なアクセスおよびその他のエンジンがインストールされます。
  3. SQL Server を開き、次を実行します。

    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'Ad Hoc Distributed Queries', 1;
    GO
    RECONFIGURE;
    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
    
    • これにより、コンポーネントに関連するクエリにアクセスして実行するために必要なパラメーターが設定されます。アドレス「ヌル」
  4. ここで、OPENROWSET 呼び出しを実行している場合は、古い JET パラメーターを使用して行われた呼び出しを破棄し、次のように新しい呼び出しを使用する必要があります。

    (*Example, importing an EXCEL file directly into SQL):
    DONT DO THIS….
    SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;HDR=YES;Database=c:\PATH_TO_YOUR_EXCEL_FILE.xls','select * from [sheet1$]')
    
    USE THIS INSTEAD…
    SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=c:\PATH_TO_YOUR_EXCEL_FILE.xls','select * from [sheet1$]')
    
    *At this point resolved two SQL issues and ran perfectly
    
  5. ここで面白いことに…..すべての Office ディスクを見つけて、必要な Office やアプリケーションをマシンに再インストールします。ディスクに移動し、64 ビット フォルダーに移動して実行することで、Office 10 の 64 ビット バージョンをインストールできますが、場合によっては、一部のサード パーティ アプリがまだそのバージョンの Office と連携していないことに注意してください。
于 2013-05-08T11:23:48.660 に答える
6

これを試して

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                       'Excel 8.0;Database=C:\Export.xls;', 
                       'SELECT id_sale FROM [ExportSheet$]')
SELECT id_sale
FROM dbo.Sale

また

INSERT INTO OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\Export.xls;Extended Properties=EXCEL 8.0')...[ExportSheet$]
SELECT id_sale
FROM dbo.Sale
于 2012-12-15T11:26:59.957 に答える
0

以下のレジストリ キーを手動で確認/設定します(正確なパスは SQL サーバーのバージョンに固有です)。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\Microsoft.ACE.OLEDB.12.0]
"AllowInProcess"=dword:00000001
"DynamicParameters"=dword:00000001

Jet 4.0 と ACE.OLEDB.12 を同時に使用すると問題が発生するようです。

于 2016-02-15T14:57:19.337 に答える
0

Office 32 ビット バージョンがインストールされ、Sql サーバー 2008 r2 (64 ビット) がインストールされています。AccessDatabaseEngine 再頒布可能パッケージの 64 ビット バージョンをインストールしようとしましたが、インストールできませんでした。次に、32ビットバージョンをインストールしようとしましたが、SQLサーバーが不平を言っていました:

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.

それで、私はOffice 64ビットのインストールに辞任しました。すると、「Microsoft Sql server 2008 r2」の起動メニューにある「データのインポートとエクスポート (32 ビット オプション)」に気付きました。だから私はそれを試してみましたが、うまくいきました。

「データベース->タスク-データのインポート..」を右クリックして、データをインポートしようとしていましたが、明らかに64ビットバージョンを開いて痛みを引き起こしていました。

于 2015-02-23T13:13:21.260 に答える