Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SQL for循环将行插入数据库?_Sql_Postgresql - Fatal编程技术网

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

如何使用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

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

我试图做的伪代码示例:

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;