【问题标题】:Insert 1000 rows in single sql statment or procedure在单个 sql 语句或过程中插入 1000 行
【发布时间】:2016-09-11 09:43:00
【问题描述】:

单条sql语句或者存储过程应该怎么写,

在 1000 行和同一列中插入 1000 个值,每列具有不同的值(在这 1000 个中)

这是我写的查询,

INSERT INTO a_b values
(
  (SELECT max(a_b_id) + 1 from a_b),
  1111,
  (SELECT s_id FROM a_b WHERE s_id in ('0','1','2','3','4')),
  0,
  1,
  sysdate,
  sysdate,
  0,
  1,
  null
);

就像说,我有 1000 个 s_id,我想一个一个地选择它们并将它们插入一个特定的列中,每次创建一个新行。

EX,在第一行 s_id 应该是 0,然后在第二行它应该是 1,这样一直持续到千,附上我正在使用的示例数据库的图像。

【问题讨论】:

  • 你有什么问题?
  • 我删除了不兼容的数据库标签。请为您真正使用的数据库添加标签。
  • 数据库是oracle 10g

标签: sql stored-procedures oracle10g


【解决方案1】:

您可以为此使用connect by

INSERT INTO a_b  (s_id, col2, col3, ....)
select level, --<< this value will change for every row
       1111,
       sysdate,
       ... more columns ...
from dual
connect by level <= 1000;

【讨论】:

    【解决方案2】:

    您可以使用交叉应用来获取 1000 行以及 1000 个其他列以插入 1000 行,如下所示:

    insert into a_b (column names...)
        select (max(a_b_id) over()) +1 as MaxId, s_id from a_b a cross apply (select 0, 1,SYSDATETIME, SYSDATETIME, 0, 1, null) b where a.s_id('111','222')--condition
    

    【讨论】:

      【解决方案3】:

      以下是语法错误。你永远不会得到这样的东西。

      create table fff
      (   id int not null
      );
      
      insert fff values (select 1,7777,select 3, select 3);
      

      所以你需要把它分解成块

      DROP PROCEDURE IF EXISTS uspRunMe;
      DELIMITER $$
      CREATE PROCEDURE uspRunMe()
      BEGIN
          insert into a_b select max(a_b_id) + 1 from a_b;
          insert into a_b values (1111);
          insert into a_b SELECT s_id FROM a_b WHERE s_id in ('0','1','2','3','4');
          insert into a_b values (0,1);
          insert into a_b select sysdate,sysdate;
          insert into a_b values (0,1,null);
      END;$$
      DELIMITER ;
      

      测试一下:

      call uspRunMe();
      

      以上是针对 MySQL 的。您在此处标记了一些数据库引擎。

      【讨论】:

      • 感谢您的解决方案,现在我更接近解决方案了,如果我将这样的插入插入 a_b 值(选择 1、选择 2、选择 3 ..等)然后我可以在过程中编写每个选择并根据相应的列插入行。
      • 很高兴听到这个消息。继续加油
      • 更新了问题,您能否针对我所面临的情况提供更合适的答案
      • 你要我为这个礼物鞠躬,嗯 :p
      • 但是你最初在这个标签上有 mysql 以及 msft sql-server。因此,这是否适用于您更改的问题(Oracle)不再是我的问题了:p ...所以您需要一个 Oracle 人员来完善它。
      猜你喜欢
      • 2014-06-16
      • 2015-06-14
      • 2023-03-08
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      相关资源
      最近更新 更多