SQL循环插入记录

本文分享了在SQL Server和Oracle环境下实现循环批量插入数据的方法。包括使用SQL Server的WHILE循环进行1000条记录的插入,以及在Oracle环境中通过双层LOOP循环完成特定模式的数据填充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 前言,面试的时候有人让我写一个向sql server数据库中循环插入1000条记录。因为我平时接触oracle比较多。就用oracle语句写了。结果面试官看了下说。oracle我也不懂。大体应该差不多。现在我把oracle和sql的循环插入语句都写出来。以免以后又忘记。

(1)sql下代码:

  1. //声明变量;
  2. DECLARE @i int
  3. DECLARE @name varchar(10)
  4. DECLARE @password varchar(10)
  5. Set @i = 1000
  6. //开始循环插入数据;
  7. WHILE @i < 1000
  8. BEGIN
  9. Set @i =@i +1
  10. SET @name = RIGHT('00000' + CAST(@i AS varchar(10)),5) 
  11. set @password = @name
  12. insert into admin values(@name,@password)
  13. END

 

(2)oracle下代码:

  1. (1)先理论
  2. declare 
  3.   i number;
  4. begin
  5. i := 1;
  6. while i<=100 loop
  7.       dbms_output.put_line(i);
  8.       i := i+1;
  9. end loop;
  10. end;
  11. (2)实践
  12. declare
  13.   year varchar2(4):='2008';
  14.   month number(2):=1;
  15.   schoolid number(10):=14640;
  16. begin
  17.   loop  
  18.     loop
  19.       insert into xx_jb1
  20.         (ID,
  21.          XXID,
  22.          GLBMJY,
  23.          XXXZGB,
  24.          XXLS,
  25.          HJXX,
  26.          HJXS,
  27.          LX_TZH_XX,
  28.          LX_TZH_XS,
  29.          BGNF,
  30.          BGYF,
  31.          STATE,
  32.          SSRQ,
  33.          TJRQ,
  34.          TBR)
  35.       values
  36.         (seq_xx_jb1.nextval,
  37.          schoolid,
  38.          1,
  39.          1,
  40.          2,
  41.          1,
  42.          248,
  43.          1,
  44.          248,
  45.          year,
  46.          month,
  47.          '已通过',
  48.          sysdate,
  49.          sysdate,
  50.          '管理员');
  51.        month := month+1;
  52.        exit when month>12;
  53.      end loop;
  54.      month := month-12;
  55.      schoolid := schoolid+1;
  56.      exit when  schoolid>15040;
  57.   end loop;
  58. end;
### 关于 SQL 循环插入记录的示例代码 以下是几种常见的实现 SQL 循环插入记录的方法: #### 方法一:使用存储过程实现循环插入 通过创建存储过程,可以在 MySQL 中轻松完成循环插入的任务。以下是一个基于引用[^3]的具体例子,该示例展示了如何向表中插入 100 条数据。 ```sql -- 删除已存在的同名存储过程 DROP PROCEDURE IF EXISTS test_insert; -- 创建新的存储过程 CREATE PROCEDURE test_insert() BEGIN DECLARE i INT; -- 初始化变量 SET i = 1; -- 开始循环 WHILE i <= 100 DO INSERT INTO `course` (`name`) VALUES (CONCAT('课程', i)); SET i = i + 1; END WHILE; END; -- 调用存储过程 CALL test_insert(); ``` 此方法利用了 MySQL 的存储过程功能,适合需要频繁执行相同逻辑的情况。 --- #### 方法二:生成单条大 SQL 语句并一次性执行 如果不想依赖存储过程,可以通过编程语言或其他工具预先生成一条包含多条插入语句的大 SQL,并将其提交给数据库执行。这种方式适用于一次性的大批量插入任务[^2]。 假设目标是插入 1000 条数据,则可以构建如下形式的 SQL 语句: ```sql INSERT INTO course (name) VALUES ('课程1'), ('课程2'), ..., ('课程1000'); ``` 为了简化手动编写的过程,通常会借助脚本动态生成上述 SQL。例如,在 Python 中可以用以下代码生成这样的字符串: ```python insert_statements = ", ".join([f"('课程{i}')" for i in range(1, 1001)]) final_sql = f"INSERT INTO course (name) VALUES {insert_statements};" print(final_sql) ``` 运行以上代码后即可获得完整的 SQL 字符串,随后可直接复制粘贴至 MySQL 客户端执行。 --- #### 方法三:纯 SQL 实现无存储过程的循环插入 对于某些场景下无法或者不希望使用存储过程的情况下,还可以采用递归 CTE(Common Table Expressions)来模拟循环效果。下面是一段演示如何利用递归查询生成连续编号并插入到指定表格的例子: ```sql WITH RECURSIVE numbers AS ( SELECT 1 AS num UNION ALL SELECT num + 1 FROM numbers WHERE num < 100 ) INSERT INTO course (name) SELECT CONCAT('课程', num) FROM numbers; ``` 这里定义了一个名为 `numbers` 的递归公用表达式,它从初始值 1 开始逐步累加直到达到设定的最大次数为止;之后再把得到的结果集作为源数据插入实际的目标表里去。 --- ### 总结 三种不同的技术路线各有优劣之处,具体选择哪一种取决于项目需求以及环境约束条件等因素。当面对简单重复性高的作业时推荐优先考虑第二种方案即拼接最终版SQL命令行的方式因为其无需额外配置而且兼容性强易于维护管理;而对于复杂业务逻辑则更适合选用第一种或第三种途径以便更好地控制流程细节同时提高程序灵活性和扩展能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值