我的触发器中的RAISE功能出现了小问题。这是我的SQLite代码:
CREATE TRIGGER CheckingDate
BEFORE INSERT ON MyTable
FOR EACH ROW
WHEN NEW.Start_date > NEW.End_date
BEGIN
RAISE(ABORT, 'End_date must be in the future');
END;
Start_date
和end_date
为SMALLDATETIME
,Start_date
是datetime('now')
的结果。
我在我的python 2.7程序中使用sqlite3.complete_statement()
的所有其他sql脚本运行它,它给出了Syntax Error near RAISE
。有人可以告诉我为什么吗?我在触发器中尝试了ABORT
,ROLLBACK
,而不是ABORT
或SELECT CASE
或WHEN THEN
,但仍然出错;
答案 0 :(得分:1)
RAISE()
是一个SQL函数,你需要将它作为语句的一部分使用; TRIGGER
仅允许UPDATE
,INSERT
,DELETE
或SELECT
声明;在SELECT
:
CREATE TRIGGER CheckingDate
BEFORE INSERT ON MyTable
FOR EACH ROW
WHEN NEW.Start_date > NEW.End_date
BEGIN
SELECT RAISE(ABORT, 'End_date must be in the future');
END;
这会正确触发错误:
sqlite> insert into mytable values ('2030-1-1 20:20:20', datetime('now'));
Error: End_date must be in the future