3 votes

Mise à jour SQL - Validation de chaque ligne dans l'ordre

Bonjour. Je vais faire de mon mieux pour expliquer ma question sans poster le SQL (il y a 650 lignes). Faites-moi savoir si vous avez besoin de plus d'informations.

Nous avons un système interne de gestion des commandes qui alloue les stocks en temps réel. Pour que l'allocation fonctionne correctement, nous devons savoir combien de stocks sont disponibles chaque fois qu'un utilisateur demande ce sur quoi il doit travailler (en chargeant/rechargeant sa liste de tâches). Les données ressembleraient à ceci :

ID    ItemID    QtyOrdered    QtyAvailableAfterAllocation    ParentID
1     1234      5             500                            NULL
2     1234      15            485                            1
3     1234      10            475                            2

Actuellement, une boucle while est utilisée pour définir la valeur de l'indicateur QtyAvailableAfterAllocation colonne. L'exemple ci-dessus démontre la nécessité de la boucle. La valeur de QtyAvailableAfterAllocation de la ligne 2 dépend de la valeur de QtyAvailableAfterAllocation de la ligne 1. La ligne 3 dépend de la ligne 2 et ainsi de suite.

Il s'agit de la version (très) simplifiée de la logique. Elle devient infiniment plus compliquée lorsque l'on prend en compte les kits (groupes d'articles en stock qui appartiennent à un seul article parent). Dans certains cas, il n'est pas nécessaire d'allouer des stocks à l'article parce qu'il fait partie d'un kit dont les stocks sont suffisants pour répondre à la commande. C'est pourquoi nous ne pouvons pas faire un total courant. De plus, les kits peuvent être imbriqués à l'intérieur des kits jusqu'au Nième niveau. C'est là que réside le problème. Lorsque l'on traite un grand nombre de commandes comportant des kits imbriqués, les performances de la requête sont très faibles. Je pense que la boucle est à blâmer (les tests l'ont prouvé). Voici donc la question :

Est-il possible de valider une mise à jour, une ligne à la fois et dans un ordre spécifique (sans boucle), afin que le ou les enregistrements enfants ci-dessous puissent accéder à la colonne mise à jour (QtyAvailAfterOrder_AllocationScope) dans l'enregistrement parent ?

EDITAR

Voici une petite partie du SQL. C'est la boucle while actuelle. Peut-être que cela aidera à montrer la logique nécessaire pour déterminer l'allocation pour chaque enregistrement.

http://pastebin.com/VM9iasq9

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X