ExcelからMSSQL SERVER 2008からデータをエクスポートしたいのですが、エラーが発生します
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形式のファイル保存)
私のクエリ
エラーが発生する理由を教えてください?何をする必要がありますか?
これを試して
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
OR
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
この問題に何度も苦労した後、私は次の解決策を見つけました:
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
ここで、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
以下のレジストリキーを確認/設定します手動(正確なパスはSQLサーバーのバージョンに固有です):
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\Microsoft.ACE.OLEDB.12.0]
"AllowInProcess"=dword:00000001
"DynamicParameters"=dword:00000001
Jet4.0とACE.OLEDB.12を同時に使用するのは問題のようです。
Office 32ビットバージョンがインストールされており、SQL Server 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.
それで私は64ビットのインストールオフィスに辞任しました。次に、「Microsoft Sql server 2008r2」スタートメニューの「データのインポートとエクスポート(32ビットオプション)」に気づきました。だから私はそれを試しました、そしてそれは私のために働きました。
「データベース->タスク-データのインポート..」を右クリックしてデータをインポートしようとしていましたが、これは明らかに64ビットバージョンを開いていて、苦痛を引き起こしていました。
1- 32ビットバージョンのWindowsを使用している場合は、AccessDatabaseEngine_x64.exeまたはAccessDatabaseEngine.exeをインストールします(再起動が必要です)。
2- SQL Management Studioを使用している場合は、管理者としてManagementStudioを実行します。管理者アカウントとして実行しない場合、このエラーが発生します(リンクサーバーのOLE DBプロバイダー "Microsoft.ACE.OLEDB.12.0"のデータソースオブジェクトを初期化できません "(ヌル)"。
3-このコマンドを実行してデータベースを構成します
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE with override;
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE with override;
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関数で「select * fromsheet1 $」を使用しないでください。このコードを試してください。
select * from OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=YES;DATABASE=D:\test.xlsx', sheet1$)
それでも(32ビット)エラーが発生する場合は、SQLサービスを再起動し、C:\ Windows\Tempを確認して、このディレクトリにアクセスできるかどうかを確認してください。