ON CONFLICT 甚至没有用错误语法编译?

ON CONFLICT not even compile with error syntax?

我不太确定这是否是我使用的 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

但是它会抛出这样的错误:

near "ON": syntax error:

如果 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

和:-