You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:28:25