Почему sqlite жалуется на этот код? - PullRequest
3 голосов
/ 31 октября 2011

Я пишу проект и использую поколение sql для тестирования, но SQLite объясняет мой код.

INSERT INTO Categories
(CategoryId, Name, UrlName, CategoryIndex)
VALUES
('b2cc232c-0d5c-4f35-bb6f-29c67d7d40c2', 'Using Forums', 'usingforums', 0), 
('ad9b355d-77bf-4a30-b3fe-7d562df2899f', '.NET Development', 'netdevelopment', 1), 
('c4882e5e-4eb5-4e5e-b73a-3bf358bda60e', 'Visual Studio', 'visualstudio', 2), 
('8c611ec3-5c2c-45c2-be01-6595b43155ee', 'Visual C#', 'visualcsharp', 3), 
('c96cea21-de98-4d68-b22b-90eea66d6b77', 'Visual C++', 'visualcpp', 4), 
('c6fb52d5-d4c6-48c2-8892-75f9cb330106', 'Architecture', 'architecture', 5), 
('20616eb8-2273-449b-8f65-a49621b92ea4', 'SQL Server', 'sqlserver', 6)

Ошибка: Ошибка выполнения SQL. Выполненный оператор SQL: INSERT INTO Categories ... Источник ошибки: System.Data.SQLite Сообщение об ошибке: ошибка SQLite синтаксическая ошибка около ","

Схема этой таблицы: Категории таблицы ( CategoryId UNIQUEIDENTIFIER не нулевой, Имя ТЕКСТ не нуль, UrlName TEXT не нуль, CategoryIndex INTEGER не нуль, первичный ключ (CategoryId) )

Почему?

Ответы [ 5 ]

2 голосов
/ 31 октября 2011

SQLite не позволяет вставлять несколько строк с предложением values.

Попробуйте вместо union all select:

INSERT INTO      Categories
                 (CategoryId, Name, UrlName, CategoryIndex)
          select 'b2cc232c-0d5c-4f35-bb6f-29c67d7d40c2', 'Using Forums', 'usingforums', 0
union all select 'ad9b355d-77bf-4a30-b3fe-7d562df2899f', '.NET Development', 'netdevelopment', 1
....
1 голос
/ 31 октября 2011

SQLite не поддерживает синтаксис вставки нескольких значений - это расширение MySQL для синтаксиса SQL. Вам нужно будет переписать это как набор по одному запросу на значение, так что 7 разных запросов.

0 голосов
/ 21 апреля 2013

Для дальнейшего использования SQLite недавно добавила функцию, которая позволяет создавать несколько записей на запрос, разделенных запятыми, как в вашем примере.См. User2241515s ответ для получения дополнительной информации и ссылки.

Тем не менее, я проверял это.В новых версиях SQLite3 он работает (3.7.11+) с консоли, по крайней мере, в моем случае.Проблема в том, что различные синтаксические анализаторы SQL наверняка потребуют времени.В качестве примера я использую Qt для этого.Тот же оператор, который работает в консоли, не работает, когда выполняется приложением Qt.Ошибка та же, что и выше:

Ошибка базы данных: около ",": синтаксическая ошибка Невозможно выполнить оператор

Другая возможная проблема заключается в том, что SQLite не допускаетбольшие запросы (я думаю, что сейчас около 500 созданных строк на запрос).Но ошибка для этого выглядит иначе.

0 голосов
/ 09 апреля 2013

Я не думаю, что кто-то здесь ответил на вопрос - «почему sql lite жалуется ...», потому что, если вы посмотрите документацию sqlite, она ДОЛЖНА разрешить несколько значений при вставке: http://www.sqlite.org/lang_insert.html, выдержка:«Первая форма (с ключевым словом« VALUES ») создает одну или несколько новых строк в существующей таблице.»

Так что же не так с этим кодом?

INSERT INTO "roles" ("description", "name", "rid") VALUES ('Administrator','admin',2), ('Member','member',3)

выдает эту ошибку: Ошибка запроса: рядом с ",": синтаксическая ошибка Невозможно выполнить оператор

, но это работает:

INSERT INTO "roles" ("description", "name", "rid") VALUES ('Administrator','admin',2)
0 голосов
/ 31 октября 2011

Потому что ваш SQL неверен.В каждый оператор INSERT можно вставить только один кортеж значений.

...