为什么需要 SQL IN 子句
写 SQL 时经常要根据一批 ID 筛选数据:
SELECT * FROM dbo.Orders WHERE OrderId IN ('ORD-001', 'ORD-002', 'ORD-003');
SELECT * FROM dbo.Users WHERE UserId IN (1001, 1002, 1003);
ID 来自 Excel 一列、日志文件、接口返回或 URL 参数时,手工加引号、逗号很容易出错。ComTools 文本转 SQL(Tools/Excel/TextToSql)可在浏览器本地把文本列表转成 IN (...) 片段,复制后拼进完整 SQL。
支持的输入格式
粘贴任意文本,选择分隔符后拆分:
| 分隔符 | 适用场景 |
|---|---|
| 空格 | aa bb cc 或一行多个 GUID |
| 换行 | Excel 复制一列 ID,每行一个 |
| 逗号 | id1,id2,id3 |
| 句号 | 特殊编号列表 |
| 自定义 | 如分号 ;、竖线 \| |
工具会 trim 空白并过滤空项。
输入示例(换行分隔 GUID)
21d611b2-ca84-45bd-80e9-3456d0bf6ac5
bb6c33f3-f142-418d-8414-9b8f33b6f3da
7fe11ef1-2a3b-4c5d-9e8f-1234567890ab
输出示例
IN (N'21d611b2-ca84-45bd-80e9-3456d0bf6ac5', N'bb6c33f3-f142-418d-8414-9b8f33b6f3da', N'7fe11ef1-2a3b-4c5d-9e8f-1234567890ab')
字符串使用 N'...'(Unicode),内部单引号自动转义为 ''。
使用步骤
- 打开 文本转 SQL。
- 将 ID 列表粘贴到左侧输入框。
- 选择与实际数据一致的分隔符(从一列 Excel 复制通常选 换行)。
- 点击 生成,右侧出现
IN (...)结果。 - 点击 复制,粘贴到 SSMS 或你的 SQL 客户端。
完整语句示例:
SELECT * FROM dbo.ReportTools
WHERE ToolId IN (N'21d611b2-ca84-45bd-80e9-3456d0bf6ac5', N'bb6c33f3-f142-418d-8414-9b8f33b6f3da');
常见场景
| 场景 | 分隔符 | 后续操作 |
|---|---|---|
| Excel 一列 OrderId | 换行 | SELECT / DELETE 前预览 |
| URL 多个 GUID(逗号) | 逗号 | 配合 URL 参数解析 |
| 日志里空格分隔 ID | 空格 | 快速拼 IN |
| 删除前核对 | 换行 | 先 SELECT COUNT(*) 再 DELETE |
与 Excel 转 SQL 的配合
| 需求 | 工具 |
|---|---|
只要 IN (...) 片段 |
文本转 SQL |
每行生成完整 DELETE / UPDATE |
Excel 转 SQL |
| Excel 整表多列生成 INSERT | INSERT 指南 |
| ID 来自 Excel 一列且要去重 | 先 去重,再复制列到本工具 |
Excel 转 SQL 的 Select 类型也可从整表生成 WHERE col IN (...),适合 ID 仍在 Excel 里、尚未复制出来的情况。
注意事项
- 数值 ID:若数据库列是
int,生成后需去掉N'...'引号,或手工改为无引号数字列表。 - IN 列表过长:SQL Server 单语句 IN 项过多可能影响计划与性能,可考虑临时表或表值参数。
- 隐私:文本在浏览器本地处理,不上传服务器,适合内网 ID 列表。
相关工具
- URL 参数格式化 — 从长 URL 提取逗号分隔 ID
- Excel 转 SQL DELETE — 按 ID 批量删除
- 文本格式化 — 分隔符拆分、加引号、再拼接
常见问题
Q:输出只有 IN (...),没有 SELECT?
A:故意设计为片段,方便拼进任意 WHERE 条件;需要完整 Select 请用 Excel 转 SQL。
Q:GUID 必须大写吗?
A:不影响 SQL Server 匹配,保持与库中存储一致即可。
Q:能否从 Excel 文件直接读列?
A:本工具为纯文本;Excel 列请复制粘贴,或使用 Excel 转 SQL Select 模式。