141 votes

SQL comment augmenter ou diminuer un pour une colonne int dans une commande

J'ai une table Commandes qui a une colonne Quantité. Lors de l'arrivée ou du départ, nous devons mettre à jour cette colonne Quantité par un. Y a-t-il un moyen de le faire en une seule action ou nous devons obtenir la valeur existante, puis en ajouter ou en déduire une en plus ?

Une autre question est la suivante : lorsque nous insérons une nouvelle ligne, devons-nous vérifier si les mêmes données existent, puis insérer si ce n'est pas le cas, laquelle est deux étapes, ou y a-t-il une meilleure façon de le faire ?

merci,

5voto

Daniel Brückner Points 36242
UPDATE Orders Order
SET Order.Quantity =  Order.Quantity - 1
WHERE SomeCondition(Order)

Pour autant que je sache, il n'y a pas de support intégré pour INSERT-OR-UPDATE dans SQL. Je suggère de créer une procédure stockée ou d'utiliser une requête conditionnelle pour y parvenir. Vous trouverez ici une collection de solutions pour différentes bases de données.

4voto

msvcyc Points 1511

Si je comprends bien, les mises à jour devraient être assez simples. Je ferais juste ce qui suit.

UPDATE TABLE SET QUANTITY = QUANTITY + 1 and
UPDATE TABLE SET QUANTITY = QUANTITY - 1 where QUANTITY > 0

Vous pouvez avoir besoin de filtres supplémentaires pour mettre à jour une seule ligne au lieu de toutes les lignes.

Pour les inserts, vous pouvez mettre en cache un identifiant unique lié à votre enregistrement localement et vérifier par rapport à ce cache et décider d'insérer ou non. L'autre approche consiste à toujours insérer et vérifier l'erreur de violation PK et ignorer puisqu' il s'agit d'un insert redondant.

0voto

dotjoe Points 11959

pour répondre à la seconde :

rendez la colonne unique et attrapez l'exception si elle est réglée sur la même valeur.

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