什么时候用 UPDATE 而不是 INSERT
数据已经在库里,只需要批量修改部分字段时,应使用 UPDATE 而不是 INSERT:
- 批量更新用户邮箱、手机号
- 修正导入错误的订单状态、价格
- 根据业务编号刷新配置项
- 测试环境按主键回滚某批数据
ComTools Excel 转 SQL 支持从 Excel / CSV 生成 UPDATE 脚本:指定 SET 列(要改的字段)和 WHERE 列(定位条件),每行 Excel 对应一条 UPDATE。
准备 Excel 文件
规则与 INSERT 相同:第一行为表头,以下为数据行。
UPDATE 示例表(按 UserId 定位,更新 Email 和 Age):
| UserId | Age | |
|---|---|---|
| 1001 | new-alice@example.com | 29 |
| 1002 | new-bob@example.com | 33 |
注意:用于 SET 的列不要同时勾为 WHERE 列;定位键(如 UserId)只放在 WHERE。
使用步骤(UPDATE)
- 打开 Excel 转 SQL。
- 上传
.xlsx、.xlsm或.csv,选择目标 Sheet。 - 语句类型 选 Update。
- 填写表名,如
dbo.Users。 - 选择数据库类型(SQL Server、MySQL、PostgreSQL 等)。
- 在列矩阵中:
- 勾选包含列 → 对应 SQL 的
SET部分(Email、Age) - 勾选 WHERE 列 → 定位条件(UserId)
- 勾选包含列 → 对应 SQL 的
- 点击 生成,预览并复制或下载 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 改邮箱 | UserId | |
| 按订单号改状态 | Status, UpdatedAt | OrderId |
| 只改一列 | 目标字段 | 主键 / 业务编号 |
| 多条件定位 | 要更新的字段 | 勾选多个 WHERE 列(AND 连接) |
安全建议(必读)
UPDATE 写错 WHERE 可能影响大量行,请务必:
- 先在测试库执行,确认影响行数与预期一致。
- 执行前用相同条件写
SELECT验证(工具也支持 Select 语句类型,可先生成查询预览)。 - 生产环境操作前备份表或数据库。
- 大批量脚本分批执行,每批 500~1000 条。
- 不要用空 WHERE 列——工具会要求至少一列 WHERE,避免全表更新。
-- 执行 UPDATE 前可先验证
SELECT * FROM dbo.Users WHERE UserId IN (1001, 1002);
临时表预览技巧
表名以 # 开头(如 #Preview)时,工具会:
- 自动生成
CREATE TABLE - 输出 INSERT 预览数据(便于对照)
- 末尾追加
SELECT与DROP
适合先导入临时表检查 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,便于核对与回滚;大批量可分批执行。