SQL查询为每行数据生成对应单条INSERT语句的实现方案
问题根因
你写的CONCAT逻辑里把三行数据的值全部硬编码写死了,完全没有引用当前遍历行的字段,所以每一行返回的拼接结果都是一模一样的全量插入语句,自然达不到逐行生成对应INSERT的效果。
正确写法
直接在拼接时引用当前行的各字段值即可,字符串类型的Name字段记得加单引号包裹,数值类字段直接拼接:
SELECT *, CONCAT( 'INSERT INTO workerTab(Id,Name,Age,Cityid) VALUES(', Id, ', ''', Name, ''', ', Age, ', ', Cityid, ')' ) AS Build FROM workerTab WHERE cityid = 5
运行结果
执行后返回的结果完全匹配预期:
| Id | Name | Age | Cityid | Build |
|---|---|---|---|---|
| 1 | John | 22 | 5 | INSERT INTO workerTab(Id,Name,Age,Cityid) VALUES(1, 'John', 22, 5) |
| 2 | Adam | 34 | 5 | INSERT INTO workerTab(Id,Name,Age,Cityid) VALUES(2, 'Adam', 34, 5) |
| 3 | Eve | 19 | 5 | INSERT INTO workerTab(Id,Name,Age,Cityid) VALUES(3, 'Eve', 19, 5) |
补充说明
- 如果
Name字段里本身包含单引号,要提前做转义,比如在MySQL环境可以把拼接逻辑里的Name替换成REPLACE(Name, '''', ''''''),把字段值里的单引号替换成两个单引号,避免生成的INSERT语句报语法错误。 - 这种动态引用字段的写法不需要硬编码固定值,后续表数据更新、查询条件变化时都能自动生成对应行的正确语句,通用性更强。
内容的提问来源于stack exchange,提问作者Azawar
相关产品推荐
相关产品推荐

