|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 11 ![]() |
Salut a tous!
G besion de votre aide! En faite g develope un programme de gestion commercial . Aimerai savoir comment ecrire un trigger qui met a jour des lignes d' une colonne. voisi mes exemples de tables au depart avec trigger: --------------------- table Produit: IDProd article 1 article1 2 article2 -------------------- ------------------------------------------------- table Commande: IDCom - IDProd - QteProdAchete - QteProdRestante 1 1 150 150 2 1 200 200 3 1 100 100 4 2 50 50 5 2 70 70 6 2 80 80 -------------------------------------------------- table ProduitVendu: IDProdVen -IDProd - QteProdVendu 1 1 300 2 2 100 ----------------------------------------------------- Alors voici ma question: Comment creer un trigger qu' apres insertion sur la table ProduitVendu va update les lignes de colonne QteProdRestante de la table commande en faisant le calcul : (QteProdRestante - QteProdVendu ) puis mettre le resultat a la derniere ligne de la dite colonne parraport au IDProd. Donc exple (150+200+100) - 300 = 150 et resultat doit etre : ------------------------------------------------- Commande: IDCom - IDProd - QteProdAchete - QteProdRestante 1 1 150 0 2 1 200 0 3 1 100 150 ------------------------------------------------------ Merci de votre aide... |
|
|
00
|
|
|
#2 | |
|
Membre Expert
![]() |
Citation:
Vous cherchez à stocker une information qui est le fruit d'un calcul... faites ce calcul en temps réel quand vous en avez besoin...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#3 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 668 ![]() |
Bonjour,
Comme le dit si bien iberserk, vous n'avez pas besoin de créer un trigger pour cela. Les triggers sont conçus pour implémenter des règles métier complexes. Il faut également noter que les triggers allongent les transactions, que l'on veut autant que c'est possible faire s'exécuter dans le temps le plus court possible. Si vous pensez devoir mettre à jour cette quantité à partir de plusieurs autres procédures stockées, crééz donc une procédure stockée qui se charge seulement de la mise à jour de cette colonne. Vous pourrez ainsi l'appeler dans d'autres procédures stockées. Si vous n'avez qu'une seule procédure stockée qui ajoute des lignes dans la table Commande, et que vous pensez qu'il y a de faibles chances que vous ayez d'autres procédures stockées qui fassent de même, alors faites tout le calcul dans cette procédure stockée. Si vous restez sur une seule procédure stockée pour le moment, voici ce que vous pourriez écrire : Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#4 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Citation:
Normalement on ne devrait jamais développer d'application qu'avec des vues et non pas directement en accédant aux tables ce qui est aberrant ! A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 11 ![]() |
En faite mon probleme est resoulu partiellement, car je veux que les lignes qu' ils ont ete deja traiter prennent la valeur 0; comme ca par exemple:
------------------------------------------------------- Commande: IDCom - IDProd - QteProdAchete - QteProdRestante 1 1 150 0 2 1 200 0 3 1 100 150 ------------------------------------------------------ |
|
|
00
|
|
|
#6 | ||||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Encore une fois, faites une vue :
Code :
Exemple : Code :
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||||
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 11 ![]() |
Je crois que je m' explique mal.
IDProd QteProdRestante 1 15 2 12 3 25 alors le resultat que je veus obtenir apres insertion de de QteProdVendu = 21 soit l' update suivant: IDProd QteProdRestante 1 0 2 0 3 31 ou ceci IDProd QteProdRestante 1 31 2 0 3 0 Bref que le resultat de la soustraction (15+12+25)-21=31 soit place a un des champs de QteProdRestante et le reste des champs prennent la valeur o. Car meme avec la procedure donc vous m avez donne ,ca update le dernier champ mais les autres champs gardent leur valeurs de depart et avec la vue j' obteins les valeurs 0 sur tous les champs. Merci . Mes excuses pour le derangement . |
|
|
00
|
|
|
#8 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 668 ![]() |
Dans ce cas il est clair que la solution de SQLPro est à tous points de vue la plus intelligente.
Si néanmoins vous souhaitez utiliser la procédure stockée, il vous faudrait la changer en : Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#9 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 11 ![]() |
L interet ce que cette colonne me permet d' affiche le reste total des produit apres chaque vente et aussi du fait qu' apres une nouvelle insertion des commandes que celle-ci ne s' addition plus avec des restes deja vendus.
C' est ca tout l' interet de cette colonne... |
|
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 11 ![]() |
Il y a une erreur du type :Syntaxe incorrecte vers le mot clé 'AS'. . Comment resoudre ce probleme ?
Merci Code :
|
||
|
|
00
|
|
|
#12 | |||
|
Membre Expert
![]() |
Citation:
Code :
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|||
|
|
00
|
|
|
#13 | |||
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 11 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#14 | |||||
|
Membre Expert
![]() |
Citation:
D'où: Code :
Donc: Code :
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|||||
|
|
00
|
|
|
#15 | |||
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 11 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#16 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 668 ![]() |
Je suis désolé pour mon erreur, mais on peut pas dire que vous cherchiez beaucoup ... :
Code :
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#17 | |
|
Membre Expert
![]() |
Citation:
Je maintiens que c'est une valeur issue d'un calcul... faites une vue comme vous le préconise SQL PRO dans lequel vous faites le calcul 'en temps réel'
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#18 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 668 ![]() |
Il est clair que c'est LA solution
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
Copyright © 2000-2012 - www.developpez.com