SQL与测试数据
从 CSV 或 JSON 示例生成 INSERT 语句
使用工具
准备几行测试数据也要花时间对齐列顺序和引用。JSON/CSV 转 INSERT 能生成草稿,却不知道表类型和约束。转换工作应包含检查 SQL 如何表示原数据,而非生成后就认为可直接执行。
用两行 JSON 看列与值对应
表名 people、方言 PostgreSQL,输入示例。id 是数字,code、name 是字符串,note 第一行 null、第二行空串。生成列顺序 id、code、name、note,各行按键匹配,即使原键顺序不同也按列放置。
[{"id":1,"code":"001","name":"O'Reilly","note":null},{"name":"Mina","id":2,"code":"010","note":""}](1, '001', 'O''Reilly', NULL),
(2, '010', 'Mina', '')确认单引号加倍、001 保留零、NULL 与 '' 不同。JSON 中裸数字 001 本身无效,要保留前导零就应从源头声明字符串,比事后修输出更可靠。
缺字段不自动变 DEFAULT
工具汇总所有行出现的键,某行缺字段就输出 NULL。删第二行 note 会从空串变 NULL,并非 DEFAULT。省略列与显式传 NULL 可能因默认值和约束产生不同结果。
业务需要时应区分缺失、空串、未知和零,如年龄零不等于未知,没备注也可能不同于空备注。先做两三行代表例,再生成大批量,更容易发现语义误读。
CSV 数字在这里保留为字符串
CSV 中 id 的 1、2 也按字符串读取,不自动推数值型。这能保留前导零,但是否适合数值列还取决目标库转换。CSV 写 NULL 会是 'NULL' 字符串,不等于 JSON null。
id,code,note
1,001,NULL
2,010,""CSV 引号用于包含分隔符和换行,与 SQL 引号是不同层。可先用 CSV 检查确认标题和含逗号字段。若字符已因解码错误损坏,生成 INSERT 无法恢复,应先检查文本与列。
嵌套与大整数需分别处理
JSON 数字保留精度,包括 18446744073709551615,但是否容纳于目标类型是另一问题。嵌套对象数组会拒绝,不会偷偷转字符串或拆关联表,也不自动生成数据库 JSON 列表达式。
上限为 1000 行、256 列及 10000 单元格,超出不能悄悄截掉行当完整结果。标识符字符也受限,不是任意模式复制工具,应先检查目标类型、默认值与必填条件。
生成是草稿,执行是另一步
输出不含连接,工具从不执行。别处执行前须检查环境、现有记录、权限与约束。自动编号列规则、主键重复、外键目标都不能从转换成功得知,应遵循目标环境审核流程。
两行虚构数据能逐格对照,先检查 NULL、空串、引号与前导零,再增加数量。假数据生成可避免复制真实个人记录。生成越快,越应把时间留给执行前的含义审核。
将生成列与实际表定义核对
JSON 有 id、name、note 不代表表可原样接受。自动 ID 可能限制显式值,NOT NULL 会拒绝 NULL,长度、外键、唯一约束也未检查。不要为消错全变字符串,应核对源语义与表类型。SQL 整齐不证明数据库接受。
工具不决定重复执行结果:唯一键可能拒绝第二次,也可能新增重复行。未设计重试就反复粘 SQL 不合适。事务、已有数据核对、冲突策略属于执行设计。这是 INSERT 草稿,不是幂等导入或迁移流程。
小样本加入引号、空字符串、null、前导零,核对原值与 SQL 字面量并解释类型决定。两三行比大量未审查导出更易发现规则差异。需要执行测试时限于授权隔离数据,不对生产表试打。