我有这个 sql 代码。它更新 excel 文件中的特定单元格。
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 位电脑上创建的 excel 文件。
有人可以帮我解决这个问题。我一直在网上搜索,但真的没有得到解决方案,甚至没有找到解决它的指南。如果这个问题已经发布并回答,请发布确切的链接。
顺便说一句,我已经安装了 ACE 提供程序和所有需要的设置。事实上,这段代码可以正常工作,但不能使用 UPDATE 语句:
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)
谢谢!