postgresql-如何使用SQL for循环将行插入数据库?

我正在使用Postgres,并且有很多行需要插入到数据库中,这些行仅在递增的整数方面有所不同。 原谅什么可能是一个愚蠢的问题,但我不是数据库专家。 是否可以直接输入将使用循环以编程方式插入行的SQL查询?

我正在尝试执行的伪代码示例:

for i in 1..10000000 LOOP
  INSERT INTO articles VALUES(i)
end loop;
William Jones asked 2020-08-01T05:42:29Z
3个解决方案
68 votes

希望我已经了解了您的需求(已在8.2测试):

INSERT INTO articles (id, name)
SELECT x.id, 'article #' || x.id
  FROM generate_series(1,10000000) AS x(id);
Milen A. Radev answered 2020-08-01T05:54:37Z
14 votes

在SQL Server中,您可以执行以下操作:

DECLARE @i int
SET @i = 1

WHILE @i<1000000
    BEGIN
        INSERT INTO articles
        VALUES @i
        SET @i=@i+1
    END
JNK answered 2020-08-01T05:54:58Z
3 votes

Afaik,您不能像SQL一样直接编写循环,而必须创建一个存储过程来完成。

虽然可以做到(但有人可能可以使其更清洁)

INSERT INTO articles WITH RECURSIVE i AS
(
 SELECT 1 x
  UNION ALL
 SELECT x + 1
  FROM i
 WHERE x < 10000000 
)
 SELECT x
 FROM i;
nos answered 2020-08-01T05:55:23Z
translate from https://stackoverflow.com:/questions/3764001/how-to-use-a-sql-for-loop-to-insert-rows-into-database