Excel 批量生成 UPDATE 语句:按主键批量修改数据库记录

2026-07-01

什么时候用 UPDATE 而不是 INSERT

数据已经在库里,只需要批量修改部分字段时,应使用 UPDATE 而不是 INSERT

  • 批量更新用户邮箱、手机号
  • 修正导入错误的订单状态、价格
  • 根据业务编号刷新配置项
  • 测试环境按主键回滚某批数据

ComTools Excel 转 SQL 支持从 Excel / CSV 生成 UPDATE 脚本:指定 SET 列(要改的字段)和 WHERE 列(定位条件),每行 Excel 对应一条 UPDATE

准备 Excel 文件

规则与 INSERT 相同:第一行为表头,以下为数据行。

UPDATE 示例表(按 UserId 定位,更新 EmailAge):

UserId Email Age
1001 new-alice@example.com 29
1002 new-bob@example.com 33

注意:用于 SET 的列不要同时勾为 WHERE 列;定位键(如 UserId)只放在 WHERE。

使用步骤(UPDATE)

  1. 打开 Excel 转 SQL
  2. 上传 .xlsx.xlsm.csv,选择目标 Sheet。
  3. 语句类型Update
  4. 填写表名,如 dbo.Users
  5. 选择数据库类型(SQL Server、MySQL、PostgreSQL 等)。
  6. 在列矩阵中:
    • 勾选包含列 → 对应 SQL 的 SET 部分(Email、Age)
    • 勾选 WHERE 列 → 定位条件(UserId)
  7. 点击 生成,预览并复制或下载 SQL。

输出示例

UPDATE dbo.Users SET Email = 'new-alice@example.com', Age = 29 WHERE UserId = 1001;
UPDATE dbo.Users SET Email = 'new-bob@example.com', Age = 33 WHERE UserId = 1002;

若开启 标识符加引号,字段名会按所选数据库方言格式化(如 SQL Server 的 [Email])。

常见场景

场景 SET 列 WHERE 列
按用户 ID 改邮箱 Email UserId
按订单号改状态 Status, UpdatedAt OrderId
只改一列 目标字段 主键 / 业务编号
多条件定位 要更新的字段 勾选多个 WHERE 列(AND 连接)

安全建议(必读)

UPDATE 写错 WHERE 可能影响大量行,请务必:

  1. 先在测试库执行,确认影响行数与预期一致。
  2. 执行前用相同条件写 SELECT 验证(工具也支持 Select 语句类型,可先生成查询预览)。
  3. 生产环境操作前备份表或数据库
  4. 大批量脚本分批执行,每批 500~1000 条。
  5. 不要用空 WHERE 列——工具会要求至少一列 WHERE,避免全表更新。
-- 执行 UPDATE 前可先验证
SELECT * FROM dbo.Users WHERE UserId IN (1001, 1002);

临时表预览技巧

表名以 # 开头(如 #Preview)时,工具会:

  1. 自动生成 CREATE TABLE
  2. 输出 INSERT 预览数据(便于对照)
  3. 末尾追加 SELECTDROP

适合先导入临时表检查 Excel 数据,再写正式 UPDATE 到生产表。

与 INSERT、DELETE 的配合

操作 典型流程
新数据入库 INSERT 指南
修改已有数据 本篇 UPDATE
删除错误数据 DELETE 指南(即将发布)
数据来自多文件 合并去重 → 转 SQL

本系列(Excel 转 SQL)

常见问题

Q:同一列能否既 SET 又 WHERE?
A:不能。定位键只应出现在 WHERE,避免逻辑冲突。

Q:支持复合主键吗?
A:可以勾选多个 WHERE 列,生成 WHERE A = ... AND B = ...

Q:和「生成 UPDATE」开发者工具有什么区别?
A:生成 UPDATE 适合粘贴少量 JSON 行;Excel 路线适合整表批量,列多时更高效。

Q:UPDATE 能否批量合并成一条语句?
A:当前每行一条 UPDATE,便于核对与回滚;大批量可分批执行。


English version