我应该如何编写单个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,就像持续到千,附上我正在使用的示例数据库的图像。
答案 0 :(得分:2)
您可以使用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;
答案 1 :(得分:1)
以下是语法错误。你永远不会得到这样的东西。
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的。你在这里标记了一些数据库引擎。
答案 2 :(得分:1)
您可以使用交叉申请获取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