sql >> Databáze >  >> RDS >> Sqlserver

SQL server při aktualizaci nastavil aktuální časové razítko

A pokud opravdu potřebujete časové razítko - pak při vložení a aktualizaci vytvořte spouštěč, který aktualizuje sloupec aktuální časovou mapou.

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

Pro aktualizaci jednoho řádku (který byl upraven nebo vložen) byste měli použít

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;

To by mělo být vše, co potřebujete. GETUTCDATE(), pokud to chcete v UTC (což preferuji)

SQL Server absolutně zná řádky, které zpracovává

Jo, hádejte co - protože to je přesně to, co říkáte SQL Server:Aktualizujte všechny řádky v tabulce.

Sady nemají aktuální řádek;) Zde začíná problém.

Jediný způsob, jak to udělat přesně tak, jak chcete, je v mé odpovědi na začátku:časové razítko. Kvůli mylným představám však přidávám radu:pořiďte si knihu o základech SQL.



  1. Odstraňte první prvek v databázi SQL Query

  2. Zrcadlit specifické tabulky v postgreSQL

  3. Jak mohu inicializovat databázi MySQL se schématem v kontejneru Docker?

  4. Jak porovnat datum v SQL