2011-10-31 138 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個查詢創建行現在)。但是這個錯誤看起來不一樣。

相關問題