小编ult*_*at0的帖子

在SQLite中的UPSERT

我不想使用,REPLACE INTO因为它基本上是一个DELETE而且INSERT使用旧列中的数据很复杂.

INSERT OR IGNORE 因为所有错误都被忽略了,所以这不是一个选择.

我读过一篇博文,其中使用了以下内容:

UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
    INSERT INTO Table1 VALUES (...)
Run Code Online (Sandbox Code Playgroud)

我非常喜欢这种方法,但我不知道如何IF-clause使用@@ROWCOUNTSQLite 实现这一点,这就是我得到的:

SELECT CASE (SELECT
    CASE
        WHEN EXISTS(SELECT 1 FROM t WHERE id=2)
            THEN 1
            ELSE 0
    END)
WHEN 1
  UPDATE t set a='pdf' WHERE id=2;
ELSE
  INSERT INTO t (a) VALUES ('pdf');
END
Run Code Online (Sandbox Code Playgroud)

SELECT CASE似乎是使用的唯一方法CASE-clause在SQLite的,因为一切抛出一个语法错误.但它也不可能在中使用UPDATE- 或 - INSERT语句SELECT CASE …

sql sqlite upsert

3
推荐指数
1
解决办法
7970
查看次数

标签 统计

sql ×1

sqlite ×1

upsert ×1