2012-03-02 24 views
11

當我將太多數據插入sqlite數據庫文件時,出現錯誤「複合SELECT中的術語太多」。我使用「insert into ... select ... union select ... union ...」。我知道這是太多的選擇語句,但我的問題是:複合SELECT語句中的最大條數是多少?SQLite錯誤:複合SELECT中的術語太多

回答

24

複合SELECT語句是由運算符UNION,UNION ALL,EXCEPT或INTERSECT連接的兩個或多個SELECT語句。我們將複合SELECT中的每個SELECT語句稱爲「術語」。

SQLite中的代碼生成器使用遞歸算法處理複合SELECT語句。爲了限制堆棧的大小,我們因此限制了複合SELECT中的術語數量。最大數量的條款是SQLITE_MAX_COMPOUND_SELECT,默認爲500.我們認爲這是一個慷慨的分配,因爲在實踐中我們幾乎從不會看到複合選擇中的術語數超過單個數字。

使用sqlite3_limit(db,SQLITE_LIMIT_COMPOUND_SELECT,size)接口,可以在運行時降低複合SELECT條件的最大數目。

瞭解更多詳情請查看本... http://www.sqlite.org/limits.html

+0

謝謝你這麼多的數量是有限的。我的SELECT語句已經過了500! – 2012-03-02 06:06:20

+0

嗯它不應該通過500! :) – shofee 2012-03-02 06:07:35

+5

@shobi由於舊版本的sqlite(<3.7.11)不允許使用INSERT INTO tablename(columnname)VALUES(value1),(value2)...插入多個行,所以很容易結束使用> 500 UNION術語來解決這個問題,例如INSERT INTO tablename(columnname)SELECT value1 AS'columnname' UNION SELECT value2 UNION SELECT value3 ... UNION SELECT value999 – sdjuan 2012-08-19 23:47:55

-6

您使用的SELECT數量沒有限制。您只需檢查列列是否與INSERT列匹配。

+2

SQLite中存在的select語句請檢查正常... – shofee 2012-03-02 06:08:54