我想从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保存)
我的查询
请告诉我,为什么我会收到错误?我需要做什么?
答案 0 :(得分:9)
经过多次与此问题的斗争,我找到了以下解决方案:
打开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
答案 1 :(得分:5)
试试这个
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
答案 2 :(得分:0)
我安装了办公室32位版本并安装了Sql server 2008 r2(64位)。我尝试安装64位版本的AccessDatabaseEngine可再发行组件,但它不会让我。然后我尝试安装32位版本,但后来sql server抱怨:
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 2008 r2”启动菜单中的“导入和导出数据(32位选项)”。所以我试过了,它对我有用。
我一直在尝试导入数据,右键单击“数据库 - >任务 - 导入数据..”这显然是打开64位版本并让我感到痛苦。
答案 3 :(得分:0)
1-如果您使用的是32位版本的Windows,则安装AccessDatabaseEngine_x64.exe或AccessDatabaseEngine.exe(需要重新启动)。
2-如果您使用的是SQL Management Studio,请以管理员身份运行Management Studio。如果不以管理员帐户运行它,则会出现此错误(无法初始化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 * from sheet1 $'。试试这段代码。
select * from OPENROWSET('MICROSOFT.ACE.OLEDB.12.0', 'Excel 12.0;HDR=YES;DATABASE=D:\test.xlsx', sheet1$)
如果仍有(32位)错误,请尝试重新启动SQL服务并检查C:\ Windows \ Temp,看看是否可以访问此目录。
答案 4 :(得分:0)
检查/设置手动下面的注册表项(确切路径特定于您的SQL Server版本):
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\Microsoft.ACE.OLEDB.12.0]
"AllowInProcess"=dword:00000001
"DynamicParameters"=dword:00000001
同时使用Jet 4.0和ACE.OLEDB.12似乎是一个问题。