2013-12-11 68 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