正在将值从 Excel 更新到 Sql 服务器

Updating value from Excel to Sql Server

我有一个 excel 具有以下列和值(示例数据)

F_PRODUCT       OLD_F_COMP_ID         F_C_NUMBER       NEW_F_COMP_ID
00231149         017-002-00-2           C_4457          017-002-01-X
ADRENALINE SPRAY 017-002-00-2           C_4457          017-002-01-X

我的Table结构(测试更新)

Create Table Testupdate(ID INT,F_PRODUCT NVARCHAR(50),F_C_NUMBER NVARCHAR(40),F_COMP_ID NVARCHAR(100))

示例值

F_PRODUCT        F_C_NUMBER     F_COMP_ID
00231149           C_4457       017-002-00-2
ADRENALINE SPRAY   C_4457       017-002-00-2

我想用 excel.

中的 NEW_F_COMP_ID 更新 TestUpdate table 中的 F_COMP_ID 列

例子

update TestUpdate set F_COMP_ID=excel.NEW_F_COMP_ID where TestUpdate.F_COMP_ID=excel.OLD_F_COMP_ID and
TestUpdate.F_C_NUMBER=excel.F_C_NUMBER

我试过下面的命令

UPDATE TestUpdate
SET TestUpdate.F_COMP_ID= ExcelTable.NEW_F_COMP_ID
    FROM TestUpdate
INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',
         'Excel 8.0;Database=D:\testdata.xls;',
         'SELECT F_PRODUCT,OLD_F_COMP_ID, F_C_NUMBER,NEW_F_COMP_ID
          FROM [Sheet1$]') AS ExcelTable
ON TestUpdate.F_PRODUCT = ExcelTable.F_PRODUCT
WHERE (TestUpdate.F_C_NUMBER = ExcelTable.F_C_NUMBER
  AND TestUpdate.F_COMP_ID = testexcel.OLD_F_COMP_ID
)

eXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE

当我尝试执行更新语句时出现以下错误。我正在使用 LibreOffice Calc for excel.how 来修复它或任何其他方式 更新这个。因为excel有5000多条记录,手动很难做到。

错误:

Cannot create an instance of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".

如果您可以将 excel 转换为 csv/txt,那么您只需通过批量插入即可获取所有内容。

DECLARE @temp_log table{ //your csv/txt sturcture}
DECLARE @SQL varchar(300)
SET @SQL = 'BULK INSERT @temp_log FROM ''' + @path + @file_name + ''''
print('SQL:' + @SQL)
EXEC(@SQL)

然后,你可以插入你想要的语句。 先看看这个能不能行。