0

我是 SQL-fu 的白带,我需要一些帮助。是否可以对具有不同 WHERE 参数的 sqlite3 表进行条件更新?我正在尝试制作触发器,但无法使其正常工作。类似的东西:

CREATE TRIGGER IF NOT EXISTS table_reorder BEFORE UPDATE ON table FOR EACH ROW BEGIN 
*IF* new.index > index *THEN* index + 1 WHERE index > new.index END
*ELSE IF* new.index < index *THEN* index - 1 WHERE index < new.index END
END;

或者,如果您有更好的想法来完成这项工作,请告诉我。我已经尝试过在SQLite 上提出的解决方案: UPDATE column of multiple rows with continuous value,但它也没有工作。

4

1 回答 1

0

您可以在触发器上使用WHEN条件。如果你想要更新,你必须实际执行它:

CREATE TRIGGER table_reorder_larger
BEFORE UPDATE OF index ON MyTable
FOR EACH ROW
WHEN NEW.index > OLD.index
BEGIN
    UPDATE MyTable SET index = index + 1 WHERE index > NEW.index;
END;

CREATE TRIGGER table_reorder_smaller
BEFORE UPDATE OF index ON MyTable
FOR EACH ROW
WHEN NEW.index < OLD.index
BEGIN
    UPDATE MyTable SET index = index - 1 WHERE index < NEW.index;
END;

但是,这将递归运行相同的触发器,因此您最好禁用递归触发器

于 2012-12-13T16:46:45.030 回答