Gestion de stock à l'aide d'un trigger [sql server 2000]

Soyez le premier à donner votre avis sur cette source.

Vue 37 978 fois - Téléchargée 4 060 fois

Description

Ce petit exemple permet de voir le fonctionnement d'un trigger sur un insert dans la table invent.
Ce trigger se déclenche lorsque l'on insert un enregistrement dans la table invent. Il décrémente ainsi le stock de l'article si celui-ci est suivi en stock. On retrouve cette information dans la table article grâce au champ "ART_suivi". si ART_suivi = 0 pas de suivi de stock. Si ART_suivi = 1 => suivi de stock donc décrémentation du stock de cette article.

Le zip contient un script de création de la base, ainsi que de l'insertion de données. Les dernières lignes permettent de voir l'éffet du trigger.

Source / Exemple :


create trigger Gestion_stock
on invent
FOR INSERT
AS
IF (select ART_suivi from Articles,inserted where Articles.ART_Ref = Inserted.ART_Ref) > 0
BEGIN
	update S SET
	S.Stock_Art = (S.Stock_Art - I.Quantite)
	FROM Stock as S INNER JOIN Inserted as I
	ON S.ART_Ref = I.ART_Ref
END

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Moundir76
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Statut
Membre
Dernière intervention
16 mai 2014
-
Merci pour ton aide
fun_moncif
Messages postés
6
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 mars 2007
-
bonjour Les Amis, g besion d'un tutorial et des exemples progrissiv pr mieu comprendre les triggers !
svp...
cs_Malkuth
Messages postés
278
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
2 -
En fait lors d'une insertion de la forme :

INSERT INTO Tbl_1
(Chp_1, Chp_2, Chp_3)
SELECT
Chp_1, Chp_2, Chp_3
FROM
Tbl2
WHERE Tbl_2.Chp_4=@Condition

on voie que si la condition 'Tbl_2.Chp_4=@Condition'
Est satisfaite par plusieurs enregistrement de Tbl_2 alors
on inserrera toutes ces lignes en même temps

Daqns ce cas le trigger n'est lancer qu'une seule fois pour l'ensemble des lignes inserer (et c'est heureux car je t'explique pas le temps que ca metrait lors d'une insertion de 1000000 enregistrement).

dans ce cas la pseudo Table inserted ne contient pas 1 mais plusieurs enregistrement.

sinon pour le Art_suivi je suis aller un peu vite ,
il manque effectivement une Jointure :
voilà ma nouvelle proposition

create trigger Gestion_stock
on invent
FOR INSERT
AS
update S SET
Stock_Art = (S.Stock_Art - I.Quantite)
FROM
Stock as S
INNER JOIN Inserted as I
ON S.ART_Ref = I.ART_Ref
INNER JOIN Articles As A
ON A.ART_Ref = I.ART_Ref
WHERE
A.ART_suivi = 1
cs_Draven
Messages postés
62
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
8 octobre 2006
-
Je ne suis pas convaincu par mon message. Comme son nom l'indique un trigger d'insert va se déclencher sur chaque insertion sur la table, ou alors je n'ai pas compris ta phrase "une insertion de plusieurs enregistrements".

Quand a ton trigger il ne risque pas de fonctionner puisque le champ "ART_suivi" ne fais pas parti de la table "invent" mais de la table "Article"
cs_Malkuth
Messages postés
278
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
2 -
ce n'est pas la peine d'utiliser un triger pour supprimer les enregistrement de table qui aurait en clef etrangere une reference à une ligne que l'on veut supprimer, les mise a jours et suppression en cascade sont la pour ça.


Ensuite je pense que le triger n'aura pas l'effet souhaiter dans le cas d'une insertion de plusieurs enregistrement en effet dans ce cas le triger n'est executer qu'une foie, et les tables automatique inserted et deleted contienne tous les enregistrement affecter.

Je propose donc :

create trigger Gestion_stock
on invent
FOR INSERT
AS
update S SET
S.Stock_Art = (S.Stock_Art - I.Quantite)
FROM Stock as S INNER JOIN Inserted as I
ON S.ART_Ref = I.ART_Ref
WHERE ART_suivi = 1

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.