ON CONFLICT甚至不编译错误语法?

时间:2018-07-26 04:50:00

标签: c# sqlite system.data.sqlite

我不确定这是否是我使用的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”附近:语法错误:

1 个答案:

答案 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

和:-

enter image description here