我正在尝试弄清楚如何在 SQLite 触发器的条件中放置删除语句。
我想出了这个示例代码:
CREATE TRIGGER mytrigger
BEFORE INSERT ON mytable
BEGIN
SELECT CASE WHEN
1 == 1
THEN
DELETE FROM mytable
END;
END;
但编译失败:
Error: near "DELETE": syntax error
如果我将 DELETE FROM mytable
替换为 RAISE(FAIL, "mytrigger was activated")
,它可以正常编译。
最佳答案
据我所知,SQLite 不支持条件执行。 CASE
表达式是用于条件评估(不是执行!)的表达式(不是语句!)。这意味着您可以使用它来选择要返回的值 - 但不能选择要执行的语句。
坏消息是 SQLite 无法决定是否执行 DELETE
语句。好消息是您并不真正关心是否执行了 DELETE
语句——您只关心行是否被删除。所以 - 始终执行 DELETE
语句,但仅当您的条件返回 true 时才删除行:
CREATE TRIGGER mytrigger
BEFORE INSERT ON mytable
BEGIN
DELETE FROM mytable
WHERE 1 == 1
END;
关于sql - SQLite 触发器中 "CASE WHEN ... THEN ... DELETE ... END"的正确语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18740230/