我不确定这是否是我使用的SQLite版本的问题。但是实际上我不是直接使用本机SQLite(dll),我使用的是System.Data.SQLite
版本1.0.108.0
,看起来这是.NET 4.5唯一的(最新)版本。应用定位。
所以我想知道该版本的System.Data.SQLite
是否支持ON CONFLICT
?
这里只是带有ON CONFLICT
的基本查询:
INSERT INTO CUSTOMER(CUSTOMER_ID, CUSTOMER_NAME) VALUES('C1','N1')
ON CONFLICT(CUSTOMER_ID)
DO UPDATE SET CUSTOMER_NAME=excluded.CUSTOMER_NAME
但是它抛出了这样的错误:
“ ON”附近:语法错误:
答案 0 :(得分:3)
如果SQlite版本低于3.24.0(最近才发布),您将获得near "ON": syntax error:
。
您可以使用SELECT sqlite_version();
来检索SQLite的版本,从而确定您的SQLite的版本是否太低。
语法似乎与SQL As Understood By SQLite - Upsert中的示例语法相匹配:-
SELECT sqlite_version();
CREATE TABLE phonebook(name TEXT PRIMARY KEY, phonenumber TEXT);
INSERT INTO phonebook(name,phonenumber) VALUES('Alice','704-555-1212')
ON CONFLICT(name) DO UPDATE SET phonenumber=excluded.phonenumber;
在太低版本的SQLite上运行此示例会导致:-
SELECT sqlite_version() > OK > Time: 0s CREATE TABLE phonebook(name TEXT PRIMARY KEY, phonenumber TEXT) > OK > Time: 0.336s INSERT INTO phonebook(name,phonenumber) VALUES('Alice','704-555-1212') ON CONFLICT(name) DO UPDATE SET phonenumber=excluded.phonenumber > near "ON": syntax error > Time: 0s
和:-