Je travaille sur un code existant qui effectue des mises à jour sur une ligne spécifique un champ à la fois. La façon dont l'historique fonctionne est que tous les champs sont écrits chaque fois qu'une mise à jour, insertion ou suppression se produit. Comment est-ce que j'élimine tout mais la dernière mise à jour dans un orderId spécifique, un petit intervalle de temps, et le même userid si après que le déclencheur ait fini une insertion dans ma table d'histoire?supprimer les mises à jour pour déclencher les mêmes champs
delete from tblHistory as h
where h.OrderId in
(SELECT OrderId
from inserted
where datediff("s",myDate, getdate()) <= 5)
and exists (select b.*
FROM inserted as b
WHERE b.userId = h.userId and
b.OrderId = h.orderId) -- except last one
-- within last 1 to 5 seconds
Mon tblHistory a HistoryId comme clé primaire auto-incrémentée. Donc, je devrais avoir deux ou plusieurs HistoryIds mais seulement un OrderId et la date diff doit être dans au moins 5 secondes. Je veux m'assurer que mon historique ne déborde pas car nous n'avons qu'un espace limité pour suivre l'historique. Aussi, je ne veux que copier les données seulement si l'userId est le même.
J'ai besoin de supprimer ceci où historyId est inférieur à l'historique le plus récent. – RetroCoder
Le OrderId est également enregistré dans la table OrderHistory, mais OrderHistoryId est la fonctionnalité d'incrémentation automatique de cette table. – RetroCoder
Je pense que j'ai compris, je peux le faire après que les mises à jour sont terminées, Après l'attente, je peux supprimer la ligne historique si elle est inférieure à OrderHistoryId d'une ligne historique existante et tous les critères ci-dessus correspondent également. thx – RetroCoder