Problem: najprostszy możliwy wyzwalacz aktualizacji zapisuje nową wartość we wszystkich wierszach tabeli zamiast tylko aktualizowanego wiersza. Oto tabela:Wyzwalacz aktualizacji SQLite zmienia wszystkie wiersze w tabeli
[nazwy]
id INTEGER PRIMARY KEY
name TEXT
len INTEGER
Teraz chcę tworzyć wyzwalacze zaktualizować 'len' z długością 'name'. Ten INSERT wyzwalacz zdaje się robić zadania corectly:
CREATE TRIGGER 'namelen' AFTER INSERT ON 'names'
BEGIN
UPDATE 'names' SET len = length(NEW.name) WHERE (id=NEW.id);
END;
Problemy zaczynają się, gdy dodam podobny spust UPDATE:
CREATE TRIGGER 'namelenupd' AFTER UPDATE ON 'names'
BEGIN
UPDATE 'names' SET len = length(NEW.name) WHERE (OLD.id=NEW.id);
END;
Spust aktualizacja pisze nową długość do wszystkie wiersze tabeli pomimo klauzuli WHERE. Na przykład, jeśli powiem
UPDATE 'names' SET name='foo' where id=1;
wówczas wartość „len” staje 3 dla wszystkich wierszy tabeli. Przyjrzałem się przykładom wyzwalacza SQL i nie widzę mojego błędu. Co jeszcze należy zrobić, aby upewnić się, że wyzwalacz aktualizuje kolumnę "len" w wierszu (wersjach), które są rzeczywiście aktualizowane?
próbowałaś ** SET UPDATE 'names' len = length (NEW.name) WHERE (id = OLD.id); ** – sqlab
Jak rozwiązać ten problem? – Anima