Trigger für insert und update, das änderungsdatum
Mache ich eine einfache Tabelle mit Namen, E-Mails etc, aber ich habe auch einen ModifiedDate
. Meine Idee ist, verwenden Sie einen trigger nach insert-und update-und insert-dem aktuellen Datum. Also wenn jemand etwas tut (außer löschen), um die Spalte, das Datum sollte das widerspiegeln.
Dies ist jedoch nicht arbeiten.
CREATE TRIGGER ModDate
ON X
AFTER INSERT, UPDATE
AS
BEGIN
INSERT INTO X (ModifiedDate)
VALUES (GETDATE())
END
Nun habe ich ein paar Werte, die nicht null sein, und was dies scheint zu tun, ist zu versuchen, und erstellen Sie eine neue Zeile. Ich würde es gerne einfügen das Datum in die Zeile, wird derzeit gehandelt, ich habe keine Ahnung, wie obwohl. Auch was wenn ich 5 Zeilen auf einmal ?
- Natürlich ist das erstellen einer neuen Zeile, Sie haben eine INSERT-Anweisung. Wenn Sie abfangen möchten den insert und/oder update ändern Sie einen der Werte, die Sie brauchen würde, um die Verwendung eines INSTEAD-of-trigger. Dann Griff die mehrere Zeilen-Operationen, die Sie benötigen, zu erstellen Sie Ihre trigger-code, so dass es Referenzen der eingelegten virtuellen Tabelle. Ich würde empfehlen, mit zwei trigger-eher als eine. Oder noch besser wäre, um diese Logik in Ihrem Verfahren.
- Wie würde ich diese Logik in meinem "Verfahren" ?
- Ich war der Annahme, Sie verwenden Verfahren zum aktualisieren und einfügen, aber das könnte nicht der Fall sein. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie join der
inserted
virtuelle Tabelle im trigger zur Begrenzung der Zeilen, die aktualisiert werden, um diejenigen, die tatsächlich geändert werden. Versuchen Sie dies:Wie @ZoharPeled richtig darauf hingewiesen, in einem Kommentar unten gibt es wirklich nicht viel Sinn, mit der trigger-update das Datum einfügen - es wäre besser, verwenden
getdate()
als Standardwert für die Spalte (oder auch einer anderen SpalteInsertedDate
wenn Sie möchten, zu verfolgen, wenn die Aufzeichnungen wurden ursprünglich geschaffen wurde) und haben den trigger ändern Sie nur dieModifiedDate
Spalte nach updates.Sehen die Dokumentation für weitere Informationen über die eingefügt und gelöscht Tabellen.
GETDATE()
den default-Wert ?UPDATE
nur, und fügen Sie eine Standard -GETDATE()
fürModifiedDate
sollte es ähnlich funktionieren ? Und es tut, nur besser. Nochmals vielen Dank!Wenn Sie nicht über die Schlüssel auf die Daten einfügen und Sie sind nicht in-Befehl der sql-zum hinzufügen eines Standard-auf der modifieddate-Spalte, können Sie den insert-trigger, wo der modifieddate-Spalte null ist:
Tabelle-name: x
trigger-name: ModDate
aktualisiert-Feld nach dem einfügen oder aktualisieren in Tabelle: ModifiedDate