2012-10-11 130 views
1

我有一個使用自動生成的ID作爲主鍵的SQLite表。我想做的使用UNION SELECT批量插入,但它似乎並沒有得到幸福,除非我指定每行一個ID:在SQLite中使用批量插入自動生成的ID

sqlite> create table CelestialObject (id INTEGER PRIMARY KEY, name VARCHAR(25), distance REAL); 
sqlite> insert into CelestialObject select 'Betelguese' as name, 200 as distance UNION SELECT 'Procyon', 500; 
Error: table CelestialObject has 3 columns but 2 values were supplied 

如果我的ID指定AUTOINCREMENT(即「ID INTEGER PRIMARY KEY AUTOINCREMENT「)當我創建表時,錯誤是相同的。

任何人都可以告訴我是否有一種方法來使用批量插入而不指定每行的ID?

+0

事實證明,你可以爲id指定NULL,它將被填充正確的: '插入CelestialObject選擇NULL作爲ID, 'Betelguese' 作爲名稱,200距離UNION SELECT NULL, '南河',500;' 由於這部作品甚至對舊SQLite的,沒有必要對我們升級。 – Alan

回答

0

要麼提供每行三個值:

INSERT INTO CelestialObject SELECT NULL, 'x', 42 ... 

或明確指定要使用的欄:

INSERT INTO CelestialObject(name, distance) SELECT 'x', 42 ... 

如果你有SQLite的3.7.11或更高版本,你可以做批量插入更容易:

INSERT INTO CelestialObject(name, distance) 
VALUES ('Betelgeose', 200), 
     ('Procyon', 500), 
     ... ; 
+0

我剛剛安裝了3.7.14,並使用了你最後的建議。它運行良好。謝謝!我會稍微留下一段時間,看看有沒有人提出其他建議。 – Alan