2011-10-31 110 views
3

我正在编写一个项目并使用生成sql进行测试,但SQLite向我的代码解释。为什么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类别... 错误来源:System.Data.SQLite 错误消息:SQLite的错误 近 “” 语法错误

模式本表: 表类别( 的CategoryId唯一标识符不空, 名文本不为空, URLNAME TEXT NOT NULL, CategoryIndex INTEGER NOT NULL, 主键(类别ID) )

为什么?

+0

我很确定它不只是抱怨。我很确定它会给你一个确切的错误信息。请发布该错误消息。另外,请发布您的Categories表格的架构。 –

+0

对不起,如果这是多余的。 SQLite是否支持来自SQL Server之类的一个VALUES的多个插入?通常,您一次只能插入一条记录,除非您使用INSERT INTO..SELECT .. –

回答

2

SQLite doesn't allow您可以使用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 
.... 
+0

链接的网站似乎表明确实允许多重插入。这是最近添加的吗? – broncoAbierto

1

SQLite不支持多值插入语法 - 这是一个MySQL扩展到SQL语法。您必须将其重写为每个值一个查询集,以便查询7个不同的查询。

0

因为你的SQL无效。您只能在每个INSERT语句中插入一个值的元组。

0

我不认为任何人在这里已经回答了thew的问题 - “为什么SQL精简版抱怨......”因为如果你看一下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

以供将来参考的SQLite有所最近增加了一个功能这允许每个查询使用逗号分隔的多个条目,如您的示例中所示。有关更多信息和链接,请参阅user2241515s的答案。

那就是说,我已经测试过了。使用SQLite3的新版本,它至少在我的情况下可以在控制台上运行(3.7.11+)。问题在于各种SQL解析器可能需要一段时间才能赶上。作为一个例子,我为此使用了Qt。在由Qt应用程序执行时,在控制台中运行的相同语句不起作用。该错误是与上面相同:

Database error: near ",": syntax error Unable to execute statement

另一个可能的问题是,SQLite不容许大型查询(我觉得限制大约每500个查询创建行现在)。但是这个错误看起来不一样。