Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GESTION DE STOCK À L'AIDE D'UN TRIGGER [SQL SERVER 2000]


Information sur la source

Catégorie :Triggers Classé sous : sqlserver, gestion, stock, trigger Niveau : Débutant Date de création : 09/04/2005 Vu / téléchargé: 15 522 / 2 074

Note :
7,33 / 10 - par 6 personnes
7,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

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

  • 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
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

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Inekman le 10/04/2005 12:06:27

Yes merci ça pète, j'avais besoin d'un exemple pour apprendre les trigger.

Merci beaucoup.

Inekman.9/10

signaler à un administrateur
Commentaire de jimmy69 le 27/04/2005 10:42:03

salut ,
je viens de lire ton code qui me permet aussi d'en apprendre un peu plus sur les triggers !

J'ai une p'tite question !

est il possible de faire passer un parametre a un trigger !
je m'explique !
j'ai une table Tpersonne et a cette table est lie une table Tnews !
je veux supprimer une personne
je dois d'abord supprimer les news de cette personne!
Puis je faire un trigger before delete Tpersonnes
en lui passant la pk de la table Tpersonnes

Si oui comment je fais pour lui faire passe rle parametre !

Je te remercie

Christophe

signaler à un administrateur
Commentaire de Inekman le 27/04/2005 11:17:44

Il me semble que si tu veux supprimer une personne, l'identifiant de la personne doit se retrouver dans la table "conceptuelle" deleted créée par le trigger...à confirmer :)

signaler à un administrateur
Commentaire de Mindiell le 27/04/2005 11:21:09

Jimmy> pas besoin, tu fais plusieurs actiosn dans ton trigger :

DELETE FROM News WHERE personne_id = ID

DELETE FROM Personnes WHERE personne_id = ID

et puis c'est tout ^^

signaler à un administrateur
Commentaire de jimmy69 le 27/04/2005 11:25:09

salut inekman,

Oui tu as raison j'ai trouve un exemple sur le net mais chez moi ca tourne pas !

voila le trigger que j'ai realise

mon schema est celui ci :
Tables
-----------

Tpersonnes = pkpersonnes,nom, prenom ...
Tnews = pknews,titre, description, fkpersonnes

le trigger place sur la table Tpersonnes

create Trigger SuppPers on Tpersonnes
--Suppression
for delete
as

--Liaison
delete from Tnews
from Tnews tn
inner join DELETED d
on tn.fkpersonnes = d.pkpersonnes

mais qd je fais ds l'analyseur de requete un
delete from Tpersonnes where pkpersonnes = 3 par exemple il me dit :

Conflit entre l'instruction DELETE et la contrainte COLUMN REFERENCE 'FK__Tnews__fkpersonn__1B0907CE'. Le conflit est survenu dans la base de données 'BurgoTest', table 'Tnews', column 'fkpersonnes'.
L'instruction a été arrêtée.


A mon avis le trigger enfin la requete n'est pas bonne mais je vois pas trop comment faire !
si tu as une idee elle est la bienvenue !

Merci

Christophe

signaler à un administrateur
Commentaire de jimmy69 le 27/04/2005 11:27:36

salut Mindiell,

donc si je pige bien je fais un trigger sur la table tpersonnes avec plusieurs actions dedans !

delete tnews
delete tpersonnes
etc....

? je debute sorry si mes questions sont un peu simpliste !

Bonne journée

Christophe

signaler à un administrateur
Commentaire de Mindiell le 27/04/2005 11:34:01

Oui, tout simplement :)

Parce que ton trigger doit faire des actions dans d'autres tables.
C'est tout bete, bon courage ;)

signaler à un administrateur
Commentaire de night_enami le 15/01/2006 16:34:28

   Bonjour tt lmonde (comme réponse pour jimmy69)
c vrai quand j cré un trigger comme celui ke ta fai il m'envoie des fois ce conflit d'instruction

   D'après cke g compris par le truc ke vs voulez faire, j propose un trigger ki gère la suppression d'une personne ds une table tpersonne tt en sachant ke l'id de celle-ci existe ds une table tnews (j'espère ke g bien expliké)
   essaie ce code en tt cas pour moi il marche bien:
Create trigger supp_pers on tpersonne instead of delete
as
begin
if(select count(*) from tnews,deleted where tnews.id=deleted.id)>0
begin
print'Impossible de supprimer cet personne: elle est liée à une autre table'
rollback transaction
end
else
begin
delete tpersonne from tpersonne,deleted
where tpersonne.id=deleted.id
print'personne supprimée avec succès'
end
end

Ce trigger ne permet pa la suppression de la personne si jamais elle est liée à la table tnews mais si vs voulez la supprimer vs n'avez ka ajouté un ptit code de suppression

j'espere ke ça va aider certain

bon courage!!!

signaler à un administrateur
Commentaire de jimmy69 le 15/01/2006 17:01:18

salut salut,

J'avais abandonne la creation de cette application car je ne m'en sortais pas et puis je ne bosse pas ds ce domaine donc pas evident !

mais bon je vais essayer de tester cela cette semaine et je te tiens au courant !

Merci et bonne semaine

Christophe

signaler à un administrateur
Commentaire de night_enami le 15/01/2006 17:03:50

ok :) c comme tu veux ;)

signaler à un administrateur
Commentaire de Malkuth le 09/06/2006 22:58:59

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

signaler à un administrateur
Commentaire de Draven le 10/06/2006 11:50:39

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"

signaler à un administrateur
Commentaire de Malkuth le 10/06/2006 13:15:13

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

signaler à un administrateur
Commentaire de fun_moncif le 17/10/2006 14:14:11

bonjour Les Amis, g besion d'un tutorial et des exemples progrissiv pr mieu comprendre les triggers !
svp...

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Gestion d'erreur lors de l'execution d'un trigger [ par pasbrun ] Bonjour, Lors de l'insertion d'un certain type de donnée dans une table, le trigger se reveille. Celui ci fait des actions dans des tables autre gestion de Stock [ par dmouhouche ] Bonjour j'ai un Probleme , je peux pas calculer la valeur en Stock Fin du mois , est-que il ya quelqu'un qui peux me aiderVoici la situation :table mv Gestion des adhérants [ par Abouportant ] Bonjour je suis bloqué sur mon code je voudrais crée une gestion des adhérants et pour cela je dois compter le nombre d'adhérants différents que je po trigger et procedure stockée [ par ghano81 ] bonjour dans mon code je devrais realiser des modifications dans ma table (update ) pr ceci jé utiliser une  procedures stockéeet un trriger apres une trigger [ par yalk1960 ] Je voudrais copier une table SCH_website_xml dans une nouvelle table journal_update, qui crée un champ date de création pour chaque fois que le update connexion sqlserver [ par issam164 ] Bonjour,je travaille sur une application web developpé en asp.net j'ai un message d'erreur qui se lance comme suit : Une erreur s'est produ Performance sur sqlserver 2000 [ par ehmarc ] Bonjour,je suis actuellement sous SQL server 2000 et j'ai des probleme de performance (les requetes deviennent longue) a savoir que j'ai une volumétri lot dts sqlserver avec parametres [ par xzonz ] Salut a toutes et tous je n'arrive pas a trouver comment faire ceci:j'ai dans une table des données relatives a une journéevoila ce que je dois faire: PB TRIGGER [ par sy3ns ] J'ai une table dans ma base de donnée reservation CREATE TABLE reservation ( ... datearrivee date NOT NULL, datedepart date NOT NULL, ...) ;------ Créer un trigger en sql [ par dimitriusai ] Bonjour,je suis a la rechercher d'un tuto ou explication concernant les trigger en sql.Je dois en fait supprimer une ligne de la table a lors d'insert


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.