2017-05-04 92 views
0

我收到以下错误,当我尝试在SQLite的SQLite触发器错误:回滚

create trigger timeslot_check1 after insert on section 

for each row 
when(new.time_slot_id not in(select time_slot_id 
          from time_slot)) 
begin 
    rollback 
end; 

错误创建该触发器:近“回退”:语法错误:

+0

不应该有一个BEGIN TRANSACTION? 或者你在ROLLBACK后丢失了一个分号? –

+0

@RamMehta没有这些工作 – ankushbbbr

回答

1

正如documentation所示,只有在触发器主体中允许的SQL命令是UPDATE,INSERT,DELETE和SELECT。

引发错误,则必须从查询中使用RAISE() function

CREATE TRIGGER timeslot_check1 
BEFORE INSERT ON section 
FOR EACH ROW 
WHEN NEW.time_slot_id NOT IN (SELECT time_slot_id FROM time_slot) 
BEGIN 
    SELECT RAISE(FAIL, "invalid timeslot"); 
END; 

不管怎么说,这个检查可以用foreign key做容易得多。

+0

你的代码给出的错误:接近“RAISE”:语法错误: – ankushbbbr

+0

哎呀,忘了最重要的部分... –