繁体   English   中英

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

但这会引发如下错误:

“ ON”附近:语法错误:

您将得到near "ON": syntax error:如果SQlite版本低于3.24.0(仅最近发布)。

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

语法似乎与在SQLite理解的SQL-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 

和:-

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM