>我必须检查数据库中是否存在记录,然后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
不能
使用 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
子句为真,则更新会发生,插入不会发生,反之亦然,如果存在则为假。