2013-12-11 69 views
0

我有这个sql代码。它更新Excel文件中的特定单元格。Microsoft.ACE.OLEDB.12.0无法执行查询

SET @cmd = 'UPDATE OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;Database=C:/sompath/file.xls;HDR=NO;IMEX=0;'',''SELECT F1,F2,F3,F4,F5,F6,F7,F8,F9 FROM [Sheet1$]'') 
      set [F1] = ''Hello World'' 
      where [F1] = ''<field1>''' 
EXEC(@cmd) 

这段代码在32位成功执行,但在64位服务器(MSSQL Server 2012)中失败。我得到了64位这样的错误:

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "No value given for one or more required parameters.". 
Msg 7320, Level 16, State 2, Line 1 
Cannot execute the query "SELECT F1,F2,F3,F4,F5,F6,F7,F8,F9 FROM [Sheet1$]" against OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)". 

file.xls是在32位PC创建一个Excel文件。

有人可以帮我解决这个问题。我一直在寻找网络,但真的没有得到解决方案,甚至没有解决它的一些指南。如果这个问题已经发布和回答,请发布确切的链接。

顺便说一下,我已经安装了ACE提供程序和所有需要的设置。 事实上,此代码工作正常,但不能与UPDATE statment:

DECLARE @cmd VARCHAR(1000) 
set @cmd = 'SELECT * FROM 
      OPENROWSET(''Microsoft.Ace.OLEDB.12.0'', 
      ''Excel 12.0;Database=C:/sompath/file.xls;HDR=NO;IMEX=0'',[Sheet1$])' 

EXEC(@cmd) 

谢谢!

+0

有趣的问题。下面的文章似乎提供了一个冗长的讨论,有不同的解决方案尝试,最后是一个解决方案(至少对于OP)。 http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/ace ...祝你好运。 – Seymour

+0

你有* * 32和64位的ACE OLEDB 12驱动程序安装? – billinkc

+0

@billinkc,我不是管理员,但我认为只有64位版本的ACE安装。这是否重要? – Temp

回答

2

excel文件必须从64位MS Office创建/重新保存。就这样!

+0

顺便说一下,我真的不想回答我自己的问题。我将此标记为答案,以便其他具有相同问题的人员能够得到指导并轻松找到对此问题的答案。这是第二次。 – Temp

+0

将它打开是件痛苦的事。 – Rob