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

Posted

技术标签:

【中文标题】在单个 sql 语句或过程中插入 1000 行【英文标题】:Insert 1000 rows in single sql statment or procedure 【发布时间】: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 【参考方案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 人员来完善它。

以上是关于在单个 sql 语句或过程中插入 1000 行的主要内容,如果未能解决你的问题,请参考以下文章

sql server中怎么把一个表的数据全部插入到另一个表,每次1000条的插入,一次执行,不要在存储过程里改的

SQL 存档脚本

存储过程常见语法

在oracle中,如何利用sql语句,往一个表中插入1000行相同的数据。在线等,求解

如何使用 SQL Server 中的存储过程在单个查询中插入多行

如何从1个表中选择许多行并将其插入另一个表中特定行的特定JSONB字段中?但是在单个原始SQL查询中