Problem: Ein möglichst einfacher Aktualisierungstrigger schreibt einen neuen Wert in alle Tabellenzeilen und nicht nur in die Zeile, die aktualisiert wird. Hier ist die Tabelle:SQLite-Aktualisierungstrigger ändert alle Zeilen in der Tabelle
[Namen]
id INTEGER PRIMARY KEY
name TEXT
len INTEGER
Jetzt möchte ich Trigger erstellen aktualisieren 'len' mit der Länge von 'name'. Dieser INSERT-Trigger scheint corectly, den Job zu:
CREATE TRIGGER 'namelen' AFTER INSERT ON 'names'
BEGIN
UPDATE 'names' SET len = length(NEW.name) WHERE (id=NEW.id);
END;
Probleme beginnen, wenn ich einen ähnlichen UPDATE-Trigger hinzufügen:
CREATE TRIGGER 'namelenupd' AFTER UPDATE ON 'names'
BEGIN
UPDATE 'names' SET len = length(NEW.name) WHERE (OLD.id=NEW.id);
END;
Die Update-Trigger die neue Länge zu alle Zeilen der Tabelle schreiben , trotz der WHERE-Klausel. wenn ich sage, zum Beispiel
UPDATE 'names' SET name='foo' where id=1;
dann wird der Wert von ‚len‘ wird 3 für alle Zeilen der Tabelle. Ich habe sqlite Trigger-Beispiele angeschaut und kann meinen Fehler nicht sehen. Was muss ich noch tun, um sicherzustellen, dass der Trigger die 'len' Spalte aktualisiert nur in den Zeilen, die tatsächlich aktualisiert werden?
haben Sie versucht ** UPDATE SET 'Namen' len = Länge (NEW.name) WHERE (id = OLD.id); ** – sqlab
Wie haben Sie dieses Problem beheben? – Anima