如何在SQL中重复执行INSERT语句n次,支持日期递增或不递增?
批量执行SQL插入的两种实现方式
一、每次递增received天数的SQL实现(直接用SQL完成)
你可以用**递归CTE(公共表表达式)**生成1到n的数字序列,配合原SQL逻辑一次性插入n条记录,不用循环执行多次语句。以插入30条为例:
WITH RECURSIVE generate_series(i) AS ( SELECT 1 UNION ALL SELECT i + 1 FROM generate_series WHERE i < 30 ) INSERT INTO `results` (batch_id, workstation_id, result, received, log_time) SELECT 281, 13, ABS(RANDOM()) % (232.91 - 69.87) + 69.87, DATETIME('now', '+' || i || ' day', 'localtime'), DATETIME('now', 'localtime') FROM generate_series;
- 把语句里的
i < 30改成i < n,就能控制插入的总条数 - 每条记录的
received会按序列值递增天数,第1条加1天,第2条加2天,以此类推 log_time保持为插入时的本地时间,若需要固定为同一时间,直接替换成固定的时间字符串即可
二、不递增天数,重复执行原语句的方法
方法1:用SQL递归CTE批量插入
同样用递归CTE生成序列,只是received固定使用+1 day逻辑:
WITH RECURSIVE generate_series(i) AS ( SELECT 1 UNION ALL SELECT i + 1 FROM generate_series WHERE i < 30 ) INSERT INTO `results` (batch_id, workstation_id, result, received, log_time) SELECT 281, 13, ABS(RANDOM()) % (232.91 - 69.87) + 69.87, DATETIME('now', '+1 day', 'localtime'), DATETIME('now', 'localtime') FROM generate_series;
方法2:客户端/脚本循环执行
如果用SQLite命令行,可通过shell循环实现:
for i in {1..30}; do sqlite3 your_database.db "INSERT INTO results (batch_id, workstation_id, result, received, log_time) VALUES (281, 13, ABS(RANDOM()) % (232.91 - 69.87) + 69.87, DATETIME('now', '+1 day', 'localtime'), DATETIME('now', 'localtime'));" done
也可以用Python、Java等编程语言编写循环,调用SQL执行接口重复运行原插入语句。
内容的提问来源于stack exchange,提问作者1966bc
相关产品推荐
相关产品推荐

