我正在使用Postgres,並且我有大量需要插入到數據庫中的行,這些行僅在遞增的整數方面有所不同。原諒可能是一個愚蠢的問題,但我不是一個數據庫大師。 是否可以直接輸入一個SQL查詢,該查詢將使用循環以編程方式插入行?如何使用SQL for循環將行插入數據庫?
例如在我想要做的僞代碼:
for i in 1..10000000 LOOP
INSERT INTO articles VALUES(i)
end loop;
我正在使用Postgres,並且我有大量需要插入到數據庫中的行,這些行僅在遞增的整數方面有所不同。原諒可能是一個愚蠢的問題,但我不是一個數據庫大師。 是否可以直接輸入一個SQL查詢,該查詢將使用循環以編程方式插入行?如何使用SQL for循環將行插入數據庫?
例如在我想要做的僞代碼:
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);
謝謝,我必須爲我的所有角色添加一個權限,所以我做了:插入到ROLE_PERM(ROLE_ID,PERMISSION_ID) \t從ROLE order按ROLE_ID選擇ROLE_ID,722; – 2014-10-07 11:13:05
據我所知,你不能寫一個循環直接作爲SQL,你必須創建一個stored procedure做。
這樣做雖然(但有人或許可以使它更清潔)
INSERT INTO articles WITH RECURSIVE i AS
(
SELECT 1 x
UNION ALL
SELECT x + 1
FROM i
WHERE x < 10000000
)
SELECT x
FROM i;
[遞歸WITH是8.4+](http://www.postgresql.org/docs/8.4/static/queries-with.html),但是[有關在INSERT語句中支持它的文檔中沒有任何內容](http ://www.postgresql.org/docs/9.0/static/sql-insert.html)。這不一定是確切的... – 2010-09-21 21:09:28
OP確認使用v8.3,不能使用遞歸與:( – 2010-09-21 21:26:35
在SQL Server中,你可以這樣做:
DECLARE @i int
SET @i = 1
WHILE @i<1000000
BEGIN
INSERT INTO articles
VALUES @i
SET @[email protected]+1
END
有人喜歡OMGPonies可以告訴我們這是否會在postgre – JNK 2010-09-21 20:27:38
工作我的pgPLSQL是薄弱的,但:http:// www。 linuxtopia.org/online_books/database_guides/Practical_PostgreSQL_database/PostgreSQL_x20238_002.htm如果可能的話,我會使用遞歸WITH(就像你在nos的答案中看到的那樣),但我沒有一個實例來測試,所以它看起來像一個循環是必需的(至少在8.4之前),但在PostgreSQL v9中添加匿名pgPLSQL塊(最後,不知道Oracle支持多長時間),一次使用更容易 – 2010-09-21 21:13:33
它有助於瞭解您正在使用的PostgreSQL版本。 – 2010-09-21 21:11:43
@OMG Ponies PostgreSQL 8.3 – 2010-09-21 21:25:50
您需要使用LOOP - 請參閱示例:http://www.linuxtopia.org/online_books/database_guides/Practical_PostgreSQL_database/PostgreSQL_x20238_002.htm – 2010-09-21 21:28:05