Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Sql-Server beim Update setzt aktuellen Zeitstempel

Und wenn Sie wirklich einen Zeitstempel brauchen – dann machen Sie einen Trigger beim Einfügen und Aktualisieren, der die Spalte mit der aktuellen Zeitstempelkarte aktualisiert.

CREATE TRIGGER dbo.trgAfterUpdate ON dbo.YourTable
AFTER INSERT, UPDATE 
AS
  UPDATE dbo.YourTable
  SET last_changed = GETDATE()
  FROM Inserted i

Um eine einzelne Zeile (die bearbeitet oder eingefügt wurde) zu aktualisieren, sollten Sie

verwenden
CREATE TRIGGER dbo.trgAfterUpdate ON dbo.YourTable
AFTER INSERT, UPDATE 
AS
  UPDATE f set LastUpdate=GETDATE() 
  FROM 
  dbo.[YourTable] AS f 
  INNER JOIN inserted 
  AS i 
  ON f.rowID = i.rowID;

Dies sollte alles sein, was Sie brauchen. GETUTCDATE(), wenn Sie es in UTC wollen (was ich bevorzuge)

SQL Server kennt absolut die Zeilen, die er verarbeitet

Ja, raten Sie mal - denn das ist genau das, was Sie SQL Server mitteilen:Aktualisieren Sie alle Zeilen in der Tabelle.

Sätze haben keine aktuelle Zeile;) Hier beginnt das Problem.

Die einzige Möglichkeit, dies genau so zu tun, wie Sie es möchten, steht in meiner Antwort am Anfang:ein Zeitstempel. Aufgrund der Missverständnisse füge ich jedoch einen Rat hinzu:Holen Sie sich ein Buch über SQL-Grundlagen.