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

SQL Server 2012 :écarts de DATETIME entre les insertions et les déclencheurs

En raison de la nature déclarative de SQL, le moteur de base de données pourrait prendre la liberté d'évaluer des parties d'une instruction SQL dans l'ordre qu'il juge approprié (tant que cela n'affecte pas la sémantique). Votre suggestion que GETUTCDATE() pourrait être mis en cache, est plausible.

Je sais que cela ne répond pas à votre question. Mais quelle que soit l'implémentation de GETUTCDATE dans SQL2012, cela pourrait bien changer dans une future version. Évitez donc de vous y fier, sinon les futures mises à niveau pourraient devenir un véritable casse-tête. Implémentez votre logique d'une manière qui ne repose sur aucune hypothèse concernant l'ordre d'évaluation.

Dans votre cas spécifique, je vois quelques solutions possibles.

  1. Si vous n'avez aucun problème avec OwningStatuses avoir un moment un peu plus tard que UserStatusesHistory , cela peut déjà aider si vous envoyez la troisième étape à SQL Server en tant que lot séparé.
  2. Échangez les étapes 2 et 3 ; et laissez le déclencheur interroger OwningStatuses au lieu d'inventer sa propre date.
  3. Arrêtez d'utiliser des déclencheurs ; il y a plus d'une raison d'envisager cela.