Comment rejoindre des nombres séquentiels sur des données non apparentées (SQL Server)
-
11-11-2019 - |
Question
Cette question est un suivi d'une question précédente que j'avais sur la découverte de gammes de numéros séquentiels sans avoir à recourir aux curseurs (Travailler avec des nombres séquentiels dans SQL Server 2005 sans curseurs). J'utilise SQL Server 2005.
Ce que je dois faire avec ces chiffres, c'est d'attribuer ces numéros à des enregistrements dans un tableau. Je n'arrive pas à trouver un moyen de relier réellement le tableau des nombres avec les enregistrements qui ont besoin de ces chiffres.
Une solution possible qui m'est venue à l'esprit a été d'insérer les enregistrements dans un tableau temporaire en utilisant une identité et en utilisant le début de la plage de nombres comme graine d'identité. Le seul problème avec cette approche est que s'il y a des lacunes dans la séquence de nombres, je finirai avec des numéros de contrôle en double.
Voici à quoi ressemblent mes tables (trop simplifiées):
Tableau de numéros:
Number
-------
102314
102315
102319
102320
102324
102329
Tableau de données:
CustomerId PaymentAmt ControlNumber
---------- ---------- -------------
1001 4502.01 NULL
1002 890.00 NULL
9830 902923.34 NULL
J'ai besoin d'un moyen de le faire alors je me retrouve avec:
CustomerId PaymentAmt ControlNumber
---------- ---------- -------------
1001 4502.01 102314
1002 890.00 102315
9830 902923.34 102319
Est-ce possible sans avoir à utiliser les curseurs? La raison pour laquelle j'évite les curseurs est que notre implémentation actuelle utilise des curseurs et comme il est si lent (8 minutes sur 12 000 enregistrements), je cherchais des alternatives.
Remarque: Merci à tous ceux qui ont publié des réponses. Tous étaient super, j'ai dû choisir celui qui semblait plus facile à mettre en œuvre et le plus facile à entretenir pour que quiconque vient après moi. Très appréciée.
Pas de solution correcte