繁体   English   中英

在单个sql语句或过程中插入1000行

[英]Insert 1000 rows in single sql statment or procedure

我应该如何编写单个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,我想一个一个地选择它们并将它们插入到一个特定的列中,每次创建一个新行。

例如,在第一行中s_id应该为0,然后在第二行中应为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;

以下是语法错误。 您将永远无法获得类似的效果。

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的。 您在这里标记了一些数据库引擎。

您可以使用交叉应用来获得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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM