什么时候需要批量 DELETE
测试数据清理、过期订单归档前删除、错误导入回滚——这些场景需要按主键或业务编号批量删除记录。手工写 DELETE 容易漏条件,一旦 WHERE 写错就可能误删全表。
ComTools Excel 转 SQL 支持从 Excel / CSV 生成 DELETE 脚本:每行数据对应一条 DELETE,必须指定 WHERE 列(工具不允许无条件的全表删除)。
准备 Excel 文件
第一行为列名,以下为要删除的记录标识。
DELETE 示例表(按 OrderId 删除):
| OrderId |
|---|
| ORD-2024-001 |
| ORD-2024-002 |
| ORD-2024-003 |
多列定位时(复合主键),在 Excel 中保留所有键列:
| TenantId | OrderId |
|---|---|
| 1 | ORD-001 |
| 1 | ORD-002 |
使用步骤(DELETE)
- 打开 Excel 转 SQL。
- 上传
.xlsx、.xlsm或.csv,选择目标 Sheet。 - 语句类型 选 Delete。
- 填写表名,如
dbo.Orders。 - 选择数据库类型(SQL Server、MySQL、PostgreSQL、SQLite、Oracle)。
- 在列矩阵中只勾选 WHERE 列(如
OrderId);DELETE 不需要 SET 列。 - 点击 生成,复制或下载 SQL。
输出示例
DELETE FROM dbo.Orders WHERE OrderId = 'ORD-2024-001';
DELETE FROM dbo.Orders WHERE OrderId = 'ORD-2024-002';
DELETE FROM dbo.Orders WHERE OrderId = 'ORD-2024-003';
复合条件示例:
DELETE FROM dbo.Orders WHERE TenantId = 1 AND OrderId = 'ORD-001';
执行前安全清单(必读)
DELETE 不可逆,请务必按顺序操作:
| 步骤 | 操作 |
|---|---|
| 1 | 在测试库先执行,确认影响行数 |
| 2 | 用相同条件写 SELECT 预览(工具支持 Select 类型,或手工 SELECT COUNT(*)) |
| 3 | 备份相关表或整库 |
| 4 | 生产环境分批执行,每批 500~1000 条 |
| 5 | 执行后核对剩余数据与业务预期 |
-- 删除前先数一下会删多少行
SELECT COUNT(*) FROM dbo.Orders
WHERE OrderId IN ('ORD-2024-001', 'ORD-2024-002', 'ORD-2024-003');
若 COUNT 与 Excel 行数不一致,说明部分 ID 在库中不存在或条件有误,不要继续执行。
常见场景
| 场景 | WHERE 列 | 注意 |
|---|---|---|
| 按订单号删 | OrderId | 字符串 ID 注意引号与大小写 |
| 按用户 ID 删 | UserId | 数字列不要加多余引号 |
| 复合主键 | 多列勾选 WHERE | 生成 AND 连接 |
| 先查再删 | 先用 Select 生成 IN 查询 | 见下方技巧 |
用 Select 生成 IN 列表预览
若 Excel 只有一列 ID,可先将语句类型改为 Select,勾选该列为 WHERE,生成 WHERE Id IN (...) 查询,在库里执行确认后再改回 Delete 生成删除脚本。
与 INSERT、UPDATE 的配合
| 操作 | 适用场景 | 指南 |
|---|---|---|
| INSERT | 新增数据 | INSERT 指南 |
| UPDATE | 修改已有字段 | UPDATE 指南 |
| DELETE | 按键删除行 | 本篇 |
典型工作流:错误批次 INSERT 进库 → 用本篇 DELETE 按导入批次号清理 → 修正 Excel 后重新 INSERT。
导入前建议:去重 避免重复主键导致 INSERT 失败。
临时表与软删除
- 临时表
#Preview:表名以#开头时,工具可附带建表与预览,适合先核对 ID 列表再对正式表执行 DELETE。 - 软删除:若业务用
IsDeleted = 1而非物理删除,请用 UPDATE 指南 批量更新标志位,而不是 DELETE。
本系列(Excel 转 SQL)
常见问题
Q:能否生成不带 WHERE 的 DELETE?
A:不能。工具强制至少一列 WHERE,防止误删全表。
Q:字符串 ID 含单引号怎么办?
A:工具会自动转义为 '',与 INSERT/UPDATE 一致。
Q:删除 5 万行可以吗?
A:单次生成上限 50,000 行;超大批量请拆分文件或分批执行脚本。
Q:CSV 只有一列 ID 怎么删?
A:直接上传 CSV,第一行写列名(如 OrderId),勾选 WHERE 即可。编码问题见 CSV 导入指南。