2012-03-02 12 views
11

Po wstawieniu zbyt wielu danych do pliku bazy danych sqlite pojawia się błąd "zbyt wiele warunków w złożonym WYBIERZ". Używam "insert into ... select ... union select ... union ...". Wiem, że to zbyt wiele wybranych instrukcji, ale moje pytanie brzmi: Jaka jest maksymalna liczba terminów w złożonej instrukcji SELECT?Błąd SQLite: zbyt wiele terminów w składzie WYBIERZ

Odpowiedz

24

Złożona instrukcja SELECT to dwie lub więcej instrukcji SELECT połączonych przez operatorów UNION, UNION ALL, EXCEPT lub INTERSECT. Nazywamy każdą indywidualną instrukcję SELECT w składniku WYBIERZ "termin".

Generator kodu SQLite przetwarza złożone instrukcje SELECT za pomocą algorytmu rekursywnego. Aby ograniczyć rozmiar stosu, ograniczamy zatem liczbę terminów w składniku SELECT. Maksymalna liczba terminów to SQLITE_MAX_COMPOUND_SELECT, która domyślnie wynosi 500. Uważamy, że jest to hojny przydział, ponieważ w praktyce prawie nigdy nie widzimy liczby terminów w złożonym wyborze przekraczającym pojedyncze cyfry.

Maksymalna liczba złożonych warunków SELECT może zostać obniżona w czasie wykonywania przy użyciu interfejsu sqlite3_limit (db, SQLITE_LIMIT_COMPOUND_SELECT, size).

więcej szczegółów proszę to sprawdzić ... http://www.sqlite.org/limits.html

+0

Dziękuję bardzo. Moje instrukcje SELECT minęły 500! –

+0

hmm nie powinien minąć 500! :) .. – shofee

+5

@shobi, ponieważ starsze wersje sqlite (<3.7.11) nie pozwalają na wstawianie wielu wierszy za pomocą INSERT INTO nazwa tabeli (nazwa kolumny) VALUES (wartość1), (wartość2), ... bardzo łatwo jest zakończyć z obejściem zawierającym> 500 terminów UNION dla prostego wstawiania, np. INSERT INTO nazwa tabeli (nazwa kolumny) WYBIERZ wartość1 AS 'nazwa_kolumny' UNION SELECT wartość2 UNION SELECT wartość3 ... UNION SELECT wartość999 – sdjuan

-6

Nie ma limitu liczby używanych SELEKTÓW. Wszystko, co musisz zrobić, to sprawdzić, czy lista kolumn jest zgodna z INSERT cols.

+2

w SQLite istnieje ograniczenie na liczbę w wybranych wypowiedzi pls sprawdź to właściwie ... – shofee