web-dev-qa-db-fra.com

Comment utiliser une boucle SQL for pour insérer des lignes dans la base de données?

J'utilise Postgres, et j'ai un grand nombre de lignes qui doivent être insérées dans la base de données, qui ne diffèrent que par un entier incrémenté. Pardonnez ce qui peut être une question stupide, mais je ne suis pas vraiment un gourou de la base de données. Est-il possible de saisir directement une requête SQL qui utilisera une boucle pour insérer par programmation les lignes?

Exemple en pseudo-code de ce que j'essaie de faire:

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

J'espère avoir compris ce dont vous avez besoin (testé sur 8.2):

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

Dans SQL Server, vous pouvez faire:

DECLARE @i int
SET @i = 1

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

Afaik, vous ne pouvez pas écrire une boucle directement en SQL, vous devez créer un procédure stockée pour le faire.

Cela suffira cependant (mais quelqu'un peut probablement le rendre plus propre)

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