如何借助类Xlookup功能通过Excel数据向SQL数据库补录更新数据
无宏实现Excel匹配更新SQL空值方案
适用于WMS系统禁用宏、需要实现类Vlookup逻辑补全表中空字段的场景,全程不需要额外插件、不需要宏权限,SQL新手可以直接套用。
步骤1:把Excel匹配关系导入SQL作为临时匹配表
先整理Excel里的匹配数据源,只保留两列即可:一列是和SQL表做匹配的键值列(比如你例子里存"A"的列),另一列是要补入SQL空字段的目标值列,列名可以随便取,后续SQL里对应上就行。
导入临时表两种最简单的方式,根据你自己的数据库权限选:
- 有权限用数据库导入功能的话,直接用SQL Server/MySQL自带的导入向导,选你的Excel文件,导入为临时表(示例表名记为
temp_excel_map),导入时注意两列的数据类型和WMS正式表对应字段保持一致,避免匹配时因为类型不对比不上。 - 没有导入权限的话,直接用Excel公式拼SQL取值语句,不需要手动敲数据:
- 在Excel第三列输入公式
=CONCATENATE("('",A2,"','",B2,"'),"),A列是匹配键列、B列是目标值列,下拉公式就能自动生成所有行的标准SQL值格式 - 把生成的内容复制出来,删掉最后一行末尾的逗号,套入下面的语句就能生成临时匹配表:
- 在Excel第三列输入公式
-- 直接替换括号里的内容为你Excel生成的行即可 SELECT match_key, fill_value INTO temp_excel_map FROM (VALUES ('A', 'A对应的补全值'), ('B', 'B对应的补全值'), ('C', 'C对应的补全值') ) AS t(match_key, fill_value)
注意:提前给Excel里的匹配键列去重,和Vlookup逻辑一致,如果同一个匹配键对应多个不同的补全值,会导致更新结果不符合预期。
步骤2:执行匹配更新,逻辑和Vlookup完全一致
核心逻辑:只更新「正式表匹配键和临时表匹配键相等、且正式表待补字段为空」的行,不会覆盖已经有值的字段。
先做校验,避免更新错误
跑更新语句前,先执行查询语句核对匹配结果,确认待写入的值和你预期一致:
-- 把下面的表名、字段名替换成你WMS库的实际名称 SELECT main_table.match_col AS 正式表匹配键, main_table.empty_col AS 原有空值字段, temp_excel_map.fill_value AS 待写入值 FROM wms_official_table main_table INNER JOIN temp_excel_map ON main_table.match_col = temp_excel_map.match_key WHERE main_table.empty_col IS NULL;
查询结果核对无误后,再执行更新语句。
正式更新语句
- 如果你用的是SQL Server(多数WMS系统的默认数据库),执行下面的语句:
UPDATE main_table SET main_table.empty_col = temp_excel_map.fill_value FROM wms_official_table main_table INNER JOIN temp_excel_map ON main_table.match_col = temp_excel_map.match_key WHERE main_table.empty_col IS NULL;
- 如果你用的是MySQL,执行下面的语句:
UPDATE wms_official_table main_table INNER JOIN temp_excel_map ON main_table.match_col = temp_excel_map.match_key SET main_table.empty_col = temp_excel_map.fill_value WHERE main_table.empty_col IS NULL;
注意事项
- 所有操作都是数据库原生功能+Excel基础公式,不需要启用宏,完全符合WMS系统的权限限制
- 单次更新数据量超过1000行的话,建议先在测试环境验证逻辑,正式操作前备份对应表的数据,避免误操作无法回滚
- 如果匹配键是文本类型,注意检查前后有没有多余空格,空格不一致会导致匹配失败,和Vlookup的匹配规则完全一致
内容的提问来源于stack exchange,提问作者Sunny waje
相关产品推荐
相关产品推荐

