Si la source est en insertion uniquement, donnez-lui une IDENTITY
colonne. Lorsque vous effectuez votre transfert de données, vous enregistrez la valeur la plus élevée écrite. Lors du prochain transfert, il vous suffit de rechercher des valeurs supérieures à celles enregistrées lors du transfert précédent. Nous le faisons pour transférer des enregistrements de journal vers un entrepôt de données.
Pour les lignes pouvant être mises à jour, ajoutez un indicateur "sale". Il aura trois valeurs - propre, sale et supprimé. Les requêtes quotidiennes devront omettre des lignes avec l'indicateur défini sur "supprimé". Cela coûtera cher en maintenance, en test et en temps d'exécution. Après la grande requête, vous mentionnez que toutes les lignes marquées pour suppression doivent être supprimées et le drapeau réinitialisé pour toutes les autres. Cela n'évolue pas bien.
Une alternative plus légère à Change Data Capture est Change Tracking . Il ne vous dira pas quelles valeurs ont changé, juste que la ligne a changé depuis sa dernière requête. Les fonctions intégrées facilitent la récupération des valeurs modifiées et la gestion du suivi. Nous avons réussi à utiliser CT pour traiter environ 100 000 changements par jour dans une table de 100 000 000 lignes.
Les notifications de requête agissent toujours à un levier plus élevé - au niveau d'un ensemble de résultats. Conceptuellement, c'est comme définir une vue. Si SQL Server détecte que toute ligne renvoyée via cette vue a changé, il envoie un message à l'application. Il n'y a aucune indication sur le nombre de lignes modifiées ni sur les colonnes. Il n'y a qu'un simple message disant "quelque chose s'est produit". Il appartient à la demande de se renseigner et de réagir. Pratiquement, c'est beaucoup plus complexe que cela, comme vous pouvez l'imaginer. Il existe des restrictions sur la façon dont la requête peut être définie et la notification peut se déclencher pour des conditions autres que les données modifiées. Lorsque la notification se déclenche, elle est supprimée. Si d'autres activités intéressantes se produisent par la suite, aucun autre message ne sera envoyé.
Dans le cadre de la question du PO, QN aura l'avantage d'être peu coûteux à mettre en place et peu coûteux en temps d'exécution. Il peut être important de mettre en place et de maintenir un régime rigoureux d'abonnement-réaction-message. Étant donné que le tableau de données est volumineux, il est probable qu'il y aura des modifications fréquentes, ce qui signifie que la notification est susceptible de se déclencher dans la plupart des cycles de traitement. Comme il n'y a aucune indication de ce qui a changé, le traitement incrémentiel des deltas ne sera pas possible, comme ce serait le cas avec CT ou CDC. Les frais généraux dus à un faux déclenchement sont fastidieux, mais même dans le pire des cas, la requête coûteuse n'a pas besoin d'être exécutée plus fréquemment qu'elle ne l'est actuellement.