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.