如何使用SQL for循环将行插入数据库?
我使用的是Postgres,我有大量的行需要插入到数据库中,这些行只在递增的整数方面有所不同。请原谅这可能是一个愚蠢的问题,但我不是一个数据库专家。是否可以直接输入一个使用循环以编程方式插入行的SQL查询 我试图做的伪代码示例:如何使用SQL for循环将行插入数据库?,sql,postgresql,Sql,Postgresql,我使用的是Postgres,我有大量的行需要插入到数据库中,这些行只在递增的整数方面有所不同。请原谅这可能是一个愚蠢的问题,但我不是一个数据库专家。是否可以直接输入一个使用循环以编程方式插入行的SQL查询 我试图做的伪代码示例: for i in 1..10000000 LOOP INSERT INTO articles VALUES(i) end loop; 好了,你不能直接用SQL写循环,你必须创建一个循环来完成 虽然这样做可以,但有人可能会让它更干净 INSERT INTO arti
for i in 1..10000000 LOOP
INSERT INTO articles VALUES(i)
end loop;
好了,你不能直接用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;
在SQL Server中,您可以执行以下操作:
DECLARE @i int
SET @i = 1
WHILE @i<1000000
BEGIN
INSERT INTO articles
VALUES @i
SET @i=@i+1
END
希望我已经了解您需要在8.2上测试什么:
INSERT INTO articles (id, name)
SELECT x.id, 'article #' || x.id
FROM generate_series(1,10000000) AS x(id);
像OMGPonies这样的人可以告诉我们这在postgreMy中是否有效。我的pgPLSQL很弱,但是:如果可能的话,我会使用递归,就像你在nos的回答中看到的那样,但是我没有一个实例要测试,所以看起来至少在8.4之前需要一个循环。但随着PostgreSQL v9最终添加了匿名pgPLSQL块,不知道Oracle支持多长时间,一次性使用就更容易了。这不一定是确定的…OP确认使用v8.3,不能使用递归:这有助于了解您使用的PostgreSQL版本。您需要使用循环-请参阅示例:@OMG Ponies Ouch感谢您的输入。我想你不能提供任何关于我需要的语法的一般概念的指针?在发布本文之前,我最初查看了循环文档,这就是我如何得到我在上面编写的伪代码的原因,但我似乎无法将其转化为Postgres似乎理解的任何形式。@William Jones:链接提供了PostgreSQL语法-您的FOR循环语法是相同的。另外,使用shell和psql命令行工具可以直接实现这一点,但效率不高。你有空吗?谢谢。我必须为我的所有角色添加权限,所以我这样做了:插入到角色\u PERM ROLE\u ID,权限\u ID选择ROLE\u ID,722从角色顺序按角色\u ID;