2017-05-04 91 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

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