Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Il server SQL durante l'aggiornamento imposta il timestamp corrente

E se hai davvero bisogno di un timestamp, crea un trigger su inserimento e aggiornamento che aggiorni la colonna con il timestmap corrente.

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

Per aggiornare una singola riga (che è stata modificata o inserita) dovresti usare

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;

Questi dovrebbero essere tutto ciò di cui hai bisogno. GETUTCDATE() se lo vuoi in UTC (che preferisco)

SQL Server conosce assolutamente le righe che elabora

Sì, indovina un po', perché questo è esattamente ciò che dici a SQL Server:aggiorna tutte le righe nella tabella.

I set non hanno una riga corrente;) È qui che inizia il problema.

L'unico modo per farlo esattamente come vuoi è nella mia risposta all'inizio:un timestamp. A causa delle idee sbagliate, però, aggiungo un consiglio:procurati un libro sulle basi di SQL.