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

Posted

技术标签:

【中文标题】如何使用 SQL for 循环将行插入数据库?【英文标题】:How to use a SQL for loop to insert rows into database? 【发布时间】:2010-09-21 20:02:35 【问题描述】:

我正在使用 Postgres,并且我有大量的行需要插入到数据库中,它们的区别仅在于递增的整数。原谅可能是一个愚蠢的问题,但我不是数据库专家。 是否可以直接输入将使用循环以编程方式插入行的 SQL 查询?

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

for i in 1..10000000 LOOP
  INSERT INTO articles VALUES(i)
end loop;

【问题讨论】:

了解您使用的 PostgreSQL 版本会有所帮助。 您需要使用 LOOP - 请参阅示例:linuxtopia.org/online_books/database_guides/… @OMG Ponies 非常感谢您的意见。我认为您无法就我需要的语法的一般概念提供任何指示?在发布此之前,我最初正在查看循环文档,这就是我最终得到我在上面编写的那个伪代码的方式,但我似乎无法将它变成 Postgres 似乎可以理解的任何形式。 @William Jones:该链接提供 PostgreSQL 语法 - 您的 FOR 循环语法是相同的。 另外,使用 shell 和 psql 命令行工具这样做很简单(尽管效率不高)。你在 *nix 上吗? 【参考方案1】:

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

INSERT INTO articles (id, name)
SELECT x.id, 'article #' || x.id
  FROM generate_series(1,10000000) AS x(id);

【讨论】:

谢谢。我必须为我的所有角色添加一个权限,所以我做了:插入 ROLE_PERM (ROLE_ID, PERMISSION_ID) select ROLE_ID, 722 from ROLE order by ROLE_ID;【参考方案2】:

在 SQL Server 中你可以这样做:

DECLARE @i int
SET @i = 1

WHILE @i<1000000
    BEGIN
        INSERT INTO articles
        VALUES @i
        SET @i=@i+1
    END

【讨论】:

像 OMGPonies 这样的人可以告诉我们这是否适用于 postgre 我的 pgPLSQL 很弱,但是:linuxtopia.org/online_books/database_guides/… 如果可能的话,我会使用递归 WITH(就像你在 nos 的答案中看到的那样),但我没有要测试的实例,所以看起来需要一个循环(至少在 8.4 之前)。但随着 PostgreSQL v9 添加匿名 pgPLSQL 块(最后,不知道 Oracle 支持多长时间),一次性使用更容易。【参考方案3】:

Afaik,您不能直接将循环编写为 SQL,您必须创建一个 stored procedure 才能做到这一点。

尽管如此(但有人可以让它更干净)

INSERT INTO articles WITH RECURSIVE i AS
(
 SELECT 1 x
  UNION ALL
 SELECT x + 1
  FROM i
 WHERE x < 10000000 
)
 SELECT x
 FROM i;

【讨论】:

recursive WITH is 8.4+,但有nothing in the documentation about supporting it in an INSERT statement。这不一定是确定的...... OP 使用 v8.3 确认,不能使用递归 WITH :(

以上是关于如何使用 SQL for 循环将行插入数据库?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 3.9 插入行 sql 语法错误

如何在SQLserver中利用循环语句插入大量的数据

如何在 NodeJS 中使用 for 循环插入 SQL 表?

Matlab - 迭代地将行插入/追加到矩阵中

java连sql 插入用数据用for循环,求大神指导。

使用 for 循环将多条记录插入 SQL Server 数据库