2017-05-22 4 views
2

sagen, wir haben eine Tabelle wie:Erkennen, ob eine Zeile durch EINFÜGEN ODER ERSETZEN geändert wurde?

CREATE TABLE example (
animal VARCHAR NOT NULL, 
color VARCHAR NOT NULL, 
name VARCHAR, 
UNIQUE(colA, colB)) 

Und wir dann wie dieses Kommando aus:

INSERT OR REPLACE INTO example (animal, color, name) 
VALUES ("animal", "cat", "mittens") 

Gibt es eine Möglichkeit, wenn der Wert der gesamten Reihe überhaupt geändert zu erzählen? Zum Beispiel, wenn vor diesem Befehl hatte die Tabelle die folgende Zeile:

animal = "cat", color = "orange", name = NULL 

Es wäre geändert haben, seit name geändert.

Aber wenn die Zeile vor dem Befehl bereits ist:

animal = "cat", color = "orange", name = "mittens" 

Dann gäbe es keine Veränderungen geben.

Leider scheint die changes() Funktion 1 in beiden Fällen zurückgibt. Gibt es etwas, das anzeigen würde, dass sich ein Wert tatsächlich geändert hat oder welche Spalte (n) sich geändert hat?

+1

Sie müssten einen Trigger schreiben, um diese Informationen für jede Tabelle zu berechnen. –

+0

Mögliche Referenz/Duplikat für: http://stackoverflow.com/questions/6560000/sql-selecting-rows-where-column-value-changed-from-previous-row –

Antwort

0

Ein INSERT-Befehle gibt keine Informationen zurück, mit Ausnahme der rowid der neuen Zeile, die hier nicht hilft.

Sie müssen also einen SELECT durchführen, um die alten Werte zu erhalten.

Verwandte Themen