Подтвердить что ты не робот

Как использовать цикл SQL for для вставки строк в базу данных?

Я использую Postgres, и у меня есть большое количество строк, которые нужно вставить в базу данных, которые отличаются только в терминах целого числа, которое увеличивается. Простите, что может быть глупым вопросом, но я не очень гуру базы данных. Можно ли напрямую ввести SQL-запрос, который будет использовать цикл для программной вставки строк?

Пример в псевдокоде того, что я пытаюсь сделать:

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

Ответ 1

Надеюсь, я понял, что вам нужно (проверено на 8.2):

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

Ответ 2

В SQL Server вы можете:

DECLARE @i int
SET @i = 1

WHILE @i<1000000
    BEGIN
        INSERT INTO articles
        VALUES @i
        SET @[email protected]+1
    END

Ответ 3

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;