0

私は 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 ですが、どちらも機能しませんでした。

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 に答える