clement13.net
Photo d’origine : Des tubes à essai
Description
Des tubes à essai
Source
B.Lachner · page d’origine
Licence
CC0 Domaine public
Photo d’origine, non retouchée. L’arrière-plan en est une version stylisée par le site.

Exemples : procédural contre ensembliste

Six cas, côte à côte, avec leurs pièges et leur vérification d'équivalence.

≈ 2 min de lectureLecture
En bref
  • Six cas : cumul, mise à jour, dédoublonnage, texte agrégé, calendrier, îlots.
  • Même structure : énoncé, données, deux versions, pièges, vérification.
  • Table de correspondance : « quand une boucle fait X, penser à Y ».
Sur cette page

Six cas courants où le traitement ligne à ligne est tentant, chacun présenté avec la même structure : énoncé, jeu de données, version procédurale et version ensembliste côte à côte, résultat attendu, pièges, variantes et vérification d'équivalence.

Avant de commencer

Chaque exemple est autonome : créez les tables dans une base de test, exécutez la version procédurale, puis la version ensembliste, et comparez. Le dernier bloc de chaque page vérifie que les deux versions rendent le même résultat. Pour chiffrer les écarts, voir Mesurer sérieusement.

Les six exemples#

Un tableau de correspondance#

Quand une boucle fait X, chercher l'équivalent ensembliste de X :

Si la boucle fait…Penser à…Exemple
Un cumul ou un état courantFonction de fenêtre (SUM() OVER, LAG)Cumul glissant
Une recherche par ligne dans une autre tableJointure (UPDATE … FROM … JOIN)Mise à jour par référence
Un test d'existence ou de doublonEXISTS, ROW_NUMBERDédoublonnage
Une concaténation par groupeSTRING_AGG (ou FOR XML PATH)Agrégation de texte
Une génération de lignesTable de nombres, GENERATE_SERIESCalendrier
Un suivi de séquence (« la ligne d'avant ») Différence avec ROW_NUMBER, ou LAG + somme cumuléeÎlots

Pour aller plus loin#

Ces six exemples sont des motifs. Pour des traitements entiers qui cumulent plusieurs erreurs, voir les cas catastrophiques, et la démarche qui les évite.

Comment lire ces pages#

  • Le code procédural est écrit correctement : on compare des versions justes, pas un contre-exemple de paille.
  • Aucun chiffre de performance n'est avancé : les écarts dépendent de l'environnement. Le script de la page Mesurer sérieusement permet de les mesurer chez vous.
  • Les pièges sont autant de raisons de vérifier l'équivalence entre l'ancien et le nouveau traitement.