带有不同WHERE参数的sqlite3表上的条件UPDATE

时间:2012-12-13 14:28:46

标签: sql database sqlite

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

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 sequential value上提出的解决方案,但它既不起作用。

1 个答案:

答案 0 :(得分:0)

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

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;

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