sqlite db中的case语句语法错误

时间:2018-03-09 06:38:26

标签: sqlite

我必须检查DB中是否存在记录update it,否则插入新记录。但它给出了错误。我应该如何改进该查询?

  CASE
    WHEN exists(select * from BackedUpDataIndex where filePath = 'C:\ttt') THEN
(update BackedUpDataIndex set flags =14 where
    (exists(select * from BackedUpDataIndex where filePath = 'C:\ttt')))
    ELSE insert into BackedUpDataIndex (filePath) values ('Hiii')
  END

1 个答案:

答案 0 :(得分:1)

您不能使用CASE表达式来有条件地执行DML语句。但是你可以尝试下面的逻辑重写,它应该有效:

UPDATE BackedUpDataIndex
SET flags = 14
WHERE EXISTS (SELECT 1 FROM BackedUpDataIndex WHERE filePath = 'C:\ttt');

INSERT INTO BackedUpDataIndex (filePath)
SELECT 'Hiii'
WHERE
    NOT EXISTS (SELECT 1 FROM BackedUpDataIndex WHERE filePath = 'C:\ttt') AND
    (SELECT Changes() = 0);

上述逻辑是,如果EXISTS子句为真,则更新将发生,插入不会发生,反之亦然,如果存在则为假。