Et si vous avez vraiment besoin d'un horodatage, créez un déclencheur lors de l'insertion et de la mise à jour qui met à jour la colonne avec l'horodatage actuel.
CREATE TRIGGER dbo.trgAfterUpdate ON dbo.YourTable
AFTER INSERT, UPDATE
AS
UPDATE dbo.YourTable
SET last_changed = GETDATE()
FROM Inserted i
Pour mettre à jour une seule ligne (qui a été modifiée ou insérée), vous devez utiliser
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;
Ceux-ci devraient être tout ce dont vous avez besoin. GETUTCDATE() si vous le voulez en UTC (ce que je préfère)
SQL Server connaît parfaitement les lignes qu'il traite
Ouais, devinez quoi - parce que c'est exactement ce que vous dites à SQL Server :mettez à jour toutes les lignes de la table.
Les ensembles n'ont pas de ligne actuelle ;) C'est là que le problème commence.
La seule façon de le faire exactement comme vous le souhaitez est dans ma réponse au début :un horodatage. En raison des idées fausses, cependant, j'ajoute un conseil :procurez-vous un livre sur les bases de SQL.