我必须检查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
答案 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
子句为真,则更新将发生,插入不会发生,反之亦然,如果存在则为假。