Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Serveur SQL lors de la mise à jour définir l'horodatage actuel

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.