某个列更新后不更新SQLite表行

时间:2016-03-08 16:02:12

标签: android sql sqlite

在我的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”吗?如果是这样,还有另一种方法吗?

2 个答案:

答案 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.htmlhttps://www.sqlite.org/syntax/update-stmt.html中的SQLite语法,您IF之后不能BEGIN,但

ON Products
WHEN <condition>
BEGIN
   UPDATE ...

是允许的。