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