1

我的触发器中的 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_dateSMALLDATETIME并且Start_date是 的结果datetime('now')

我在我的 python 2.7 程序中使用所有其他 sql 脚本运行它,sqlite3.complete_statement()它给出了Syntax Error near RAISE. 有人能告诉我为什么吗?我在触发器中尝试了ABORT, ROLLBACK, 而不是ABORTor SELECT CASEWHEN THEN但它仍然给出错误;

4

1 回答 1

1

RAISE()是一个 SQL 函数,您需要将其用作语句的一部分;TRIGGERs 只允许 for UPDATE, INSERT, DELETEorSELECT语句;使用它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
于 2014-01-15T16:56:05.623 回答