Ответ 1
Надеюсь, я понял, что вам нужно (проверено на 8.2):
INSERT INTO articles (id, name)
SELECT x.id, 'article #' || x.id
FROM generate_series(1,10000000) AS x(id);
Я использую Postgres, и у меня есть большое количество строк, которые нужно вставить в базу данных, которые отличаются только в терминах целого числа, которое увеличивается. Простите, что может быть глупым вопросом, но я не очень гуру базы данных. Можно ли напрямую ввести SQL-запрос, который будет использовать цикл для программной вставки строк?
Пример в псевдокоде того, что я пытаюсь сделать:
for i in 1..10000000 LOOP
INSERT INTO articles VALUES(i)
end loop;
Надеюсь, я понял, что вам нужно (проверено на 8.2):
INSERT INTO articles (id, name)
SELECT x.id, 'article #' || x.id
FROM generate_series(1,10000000) AS x(id);
В SQL Server вы можете:
DECLARE @i int
SET @i = 1
WHILE @i<1000000
BEGIN
INSERT INTO articles
VALUES @i
SET @[email protected]+1
END
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;