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

标签 c# sqlite system.data.sqlite

我不太确定这是否是我使用的 SQLite 版本的问题。但实际上我并没有直接使用 native 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

和:-

enter image description here

关于c# - ON CONFLICT 甚至没有用错误语法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51531207/

相关文章:

c# - 具有奇怪格式的字符串到数组

c# - 简单的数学运算在 double 数据类型上比在 float 数据类型上更快?

php - SQLite/PHP 只读?

c# - 在某些计算机上,应用程序无法加载 sqlite dll 文件

c# - SQLite3 中的外键支持

c# - 在 Azure 移动服务中找不到属性 nameId

c# - 使用 WCF 创建 VPN 客户端和服务器

.net - 我应该在哪里创建我的 DbCommand 实例?

sql - 是否可以执行从不同列中选择两个最大值/最小值的单个 SQL 查询?