2012-03-02 28 views
11

Khi tôi chèn quá nhiều dữ liệu vào tệp cơ sở dữ liệu sqlite, một lỗi "quá nhiều cụm từ trong SELECT hợp chất" xảy ra. Tôi sử dụng "insert into ... select ... union select ... union ...". Tôi biết đó là quá nhiều câu lệnh chọn, nhưng câu hỏi của tôi là: Số lượng tối đa các thuật ngữ trong câu lệnh SELECT ghép là gì?Lỗi SQLite: quá nhiều cụm từ trong hợp chất SELECT

Trả lời

24

Một câu lệnh SELECT phức hợp là hai hoặc nhiều câu lệnh SELECT được kết nối bởi các toán tử UNION, UNION ALL, EXCEPT hoặc INTERSECT. Chúng tôi gọi từng câu lệnh SELECT trong một hợp chất SELECT là "term".

Trình tạo mã trong các tiến trình SQLite ghép các câu lệnh SELECT sử dụng một thuật toán đệ quy. Để hạn chế kích thước của ngăn xếp, do đó chúng tôi giới hạn số lượng thuật ngữ trong một hợp chất SELECT. Số lượng thuật ngữ tối đa là SQLITE_MAX_COMPOUND_SELECT mặc định là 500. Chúng tôi nghĩ rằng đây là phân bổ hào phóng vì trong thực tế, chúng tôi hầu như không bao giờ thấy số lượng cụm từ trong một hợp chất được chọn vượt quá một chữ số.

Số lượng tối đa các thuật ngữ SELECT phức hợp có thể được giảm xuống trong thời gian chạy bằng giao diện sqlite3_limit (db, SQLITE_LIMIT_COMPOUND_SELECT, size).

để biết thêm chi tiết xin vui lòng kiểm tra này ... http://www.sqlite.org/limits.html

+0

Cảm ơn bạn rất nhiều. Câu lệnh SELECT của tôi đã trôi qua 500! –

+0

hmm không được vượt qua 500! :) .. – shofee

+5

@shobi kể từ phiên bản cũ của sqlite (<3.7.11) không cho phép chèn nhiều hàng bằng cách sử dụng INSERT INTO tablename (columnname) VALUES (value1), (value2), ... nó rất dễ dàng để kết thúc lên với một workaround với> 500 UNION điều khoản cho một chèn đơn giản như INSERT INTO tablename (columnname) SELECT value1 AS 'columnname' UNION SELECT value2 UNION SELECT value3 ... UNION SELECT value999 – sdjuan

-6

Không có giới hạn cho số lượng SELECT bạn sử dụng. Tất cả những gì bạn cần làm là kiểm tra xem danh sách các cột có phù hợp hay không với các cột INSERT.

+2

trong sqlite có một giới hạn về số lượng trên báo cáo chọn pls kiểm tra xem nó đúng ... – shofee

Các vấn đề liên quan