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

Hop*_*ess 3 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
Run Code Online (Sandbox Code Playgroud)

但它会抛出一个错误,如下所示:

靠近“ON”:语法错误:

Mik*_*keT 6

near "ON": syntax error:如果 SQlite 版本低于 3.24.0(最近才发布),您将获得一个。

您可以使用SELECT sqlite_version();检索 SQLite 的版本,从而确定您的 SQLite 版本是否太低。

语法似乎与SQL As Understood By SQLite - Upsert as per 中找到的示例的语法相匹配:-

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;
Run Code Online (Sandbox Code Playgroud)
  • 为演示添加了注意版本检查。

太低版本的 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
Run Code Online (Sandbox Code Playgroud)

和 :-

在此处输入图片说明