将值从 Excel 更新到 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

我的表结构(测试更新(

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更新测试更新表中的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.如何修复它或任何其他方式 更新此内容。因为 excel 有超过 5000 条记录,很难手动完成。

错误:

无法为链接服务器"(空("创建 OLE DB 提供程序"Microsoft.Jet.OLEDB.4.0"的实例。

如果您可以将 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)

然后,您可以使用所需的语句插入它。 先看看这是否可行。

最新更新