OLE DB提供程序"Microsoft.ACE.OLEDB.12.0"用于链接服务器"(null)"返回消息"Bookmark无效".

4 export-to-excel sql-server-2008

我想从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]". 
Run Code Online (Sandbox Code Playgroud)

它是我的excel文件导出(文件保存格式97-2003) 服务器上的Excel文件版本97-2003

我的疑问 SQL QUERY

告诉我,为什么我会收到错误?我需要做什么?

RAG*_*GKV 9

经过多次与这个问题的斗争,我找到了以下解决方案:

  1. 在64位服务器和盒子上,您需要首先卸载所有32位Microsoft Office应用程序和实例(Access 2007安装,Office 10 32位等).如果您不这样做,则无法安装新的64位Microsoft Access数据库引擎2010可再发行组件.是的,这是一个令人头痛的问题,但我找到了为需要在64位计算机上运行的JET引擎组件安装新替换件的唯一方法.
  2. 从Microsoft下载并安装新组件:http: //www.microsoft.com/downloads/en/details.aspx?FamilyID = c06b8369-60dd-4b64-a44b-84b371ede16d&displaylang = en
    • 这将安装您设置链接服务器,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
    
    Run Code Online (Sandbox Code Playgroud)
    • 这将设置访问和运行与组件相关的查询所需的参数.地址'null
  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
    
    Run Code Online (Sandbox Code Playgroud)
  5. 现在,为了有趣的部分......找到所有Office磁盘并重新安装所需的Office和/或应用程序.您可以通过访问磁盘并进入64位文件夹并运行它来安装64位版本的Office 10,但请注意,在某些情况下,某些第三方应用程序尚未与该版本的Office进行交互.


Ale*_*nko 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
Run Code Online (Sandbox Code Playgroud)

要么

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
Run Code Online (Sandbox Code Playgroud)