Как использовать цикл SQL для вставки строк в базу данных? - PullRequest
43 голосов
/ 22 сентября 2010

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

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

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

Ответы [ 3 ]

68 голосов
/ 22 сентября 2010

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

INSERT INTO articles (id, name)
SELECT x.id, 'article #' || x.id
  FROM generate_series(1,10000000) AS x(id);
14 голосов
/ 22 сентября 2010

В SQL Server вы можете сделать:

DECLARE @i int
SET @i = 1

WHILE @i<1000000
    BEGIN
        INSERT INTO articles
        VALUES @i
        SET @i=@i+1
    END
3 голосов
/ 22 сентября 2010

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...