在单个 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条的插入,一次执行,不要在存储过程里改的
在oracle中,如何利用sql语句,往一个表中插入1000行相同的数据。在线等,求解