У меня есть столбец, который я хотел бы увеличить на основе недавно вставленных/обновленных записей, но то, что у меня до сих пор, не работает.SQLite Trigger для увеличения значений условно
Таким образом, у моей таблицы ProcedureCommands
есть столбец Sequence
, который является целым числом. Всякий раз, когда создается новая запись со значением 5 Sequence
, например, я хотел бы все записи, которые имеют тот же ProcedureId
и Sequence
значение> = 5 будет увеличивается на 1.
Таблица Script
CREATE TABLE ProcedureCommands (
ProcedureCommandId INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
ProcedureId INTEGER NOT NULL,
Sequence INTEGER NOT NULL);
INSERT INTO ProcedureCommands(ProcedureId, Sequence) VALUES(1, 3);
INSERT INTO ProcedureCommands(ProcedureId, Sequence) VALUES(1, 4);
INSERT INTO ProcedureCommands(ProcedureId, Sequence) VALUES(1, 5);
INSERT INTO ProcedureCommands(ProcedureId, Sequence) VALUES(1, 6);
INSERT INTO ProcedureCommands(ProcedureId, Sequence) VALUES(2, 4);
INSERT INTO ProcedureCommands(ProcedureId, Sequence) VALUES(2, 5);
Trigger Script
CREATE TRIGGER Update_Sequence UPDATE OF Sequence ON ProcedureCommands FOR EACH ROW
BEGIN
UPDATE ProcedureCommands
SET Sequence = CASE WHEN Sequence >= new.Sequence THEN Sequence = Sequence + 1 ELSE Sequence END
WHERE ProcedureId = new.ProcedureId;
END;
К сожалению, триггер, как написано не работает. Как я могу условно увеличить поле после вставки/обновления?
триггер Insert прекрасно работает. Я смог использовать> =, добавив дополнительный фильтр 'ProcedureCommandId! = New.ProcedureCommandId'. Я все еще смущен тем, как заставить это работать должным образом после обновления. Я попытался следующие, но поля получить увеличивается в несколько раз, а не на 1 'CREATE TRIGGER Refresh_Sequence_Update ОБНОВЛЕНИЕ последовательности на ProcedureCommands НАЧАТЬ UPDATE ProcedureCommands SET Sequence = Последовательность + 1 WHERE ProcedureId = new.ProcedureId И Sequence> = new.Sequence И ProcedureCommandId! = New.ProcedureCommandId; END; ' – wesmantooth
Отключить [рекурсивные триггеры] (http://www.sqlite.org/pragma.html#pragma_recursive_triggers). (Что, однако, может потребоваться для других триггеров в вашей БД.) –
Благодарим вас за ответ, но, похоже, мне не повезло. Я использую C# Entity Framework, который, похоже, не поддерживает прямую поддержку инструкции PRAGMA для рекурсивных триггеров (она не указана в свойствах интерфейса GUI и добавление вручную к строке подключения не изменяет поведение). – wesmantooth