在我的android SQLite项目中,我有一个触发器,我想在OrderNumber以外的任何列被更改时将产品的OrderNumber更新为-1。我创建了以下内容:
CREATE TRIGGER IF NOT EXISTS Reset_OrderNumber AFTER UPDATE
ON Products
BEGIN
IF NOT UPDATE(OrderNumber)
BEGIN
UPDATE Products SET OrderNumber = -1 WHERE OrderNumber = NEW.OrderNumber;
END
END
GO
但我收到以下错误:
android.database.sqlite.SQLiteException: near "IF": syntax error (code 1): , while compiling: CREATE TRIGGER IF NOT EXISTS Reset_OrderNumber AFTER UPDATE
ON Products
BEGIN
IF NOT UPDATE(OrderNumber)
BEGIN
UPDATE Products SET OrderNumber = -1 WHERE OrderNumber = NEW.OrderNumber;
END
END
GO
我做错了什么?在Sqlite synthax中没有“IF NOT UPDATE”吗?如果是这样,还有另一种方法吗?
答案 0 :(得分:1)
如documentation中所述,触发器主体中允许的唯一语句是 更新/插入/删除/选择语句。
要将触发器限制为某些列,您必须列出触发器应触发的所有列:
CREATE TRIGGER IF NOT EXISTS Reset_OrderNumber
AFTER UPDATE OF ID, Name, other, columns, [...] ON Products
BEGIN
UPDATE Products SET OrderNumber = -1 WHERE OrderNumber = NEW.OrderNumber;
END;
答案 1 :(得分:0)
根据https://www.sqlite.org/lang_createtrigger.html和https://www.sqlite.org/syntax/update-stmt.html中的SQLite语法,您IF
之后不能BEGIN
,但
ON Products
WHEN <condition>
BEGIN
UPDATE ...
是允许的。