begin process at 2010 07 29 22:38:28
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Triggers

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Triggers Classé sous :sqlserver, gestion, stock, trigger Niveau :Débutant Date de création :09/04/2005 Vu / téléchargé :22 983 / 2 600

Auteur : Draven

Ecrire un message privé
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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture TRIGGER DE MAJ par softnour
ENREGISTRER LES MISES À JOUR DE CHAQUE PERSONNE CONNECTÉ SUR... par witch17
SQL SERVER 2005 : HISTORISER LES PROCÉDURES STOCKÉES D'UNE B... par skweeky
VALIDATION DU FORMAT DU N° DE TÉLÉPHONE AVEC TSQL par bad_smi

 Sources en rapport avec celle ci

SQL SERVER 2000 - VIDER ET COMPACTER TOUTES LES BASES DE DON... par fabrice69
ENREGISTRER LES MISES À JOUR DE CHAQUE PERSONNE CONNECTÉ SUR... par witch17
SQL SERVER 2005 : HISTORISER LES PROCÉDURES STOCKÉES D'UNE B... par skweeky
SQL SERVER 2005 : RECHERCHE DE CHAMPS PAR LEURS NOMS MULTI B... par skweeky
VALIDATION DU FORMAT DU N° DE TÉLÉPHONE AVEC TSQL par bad_smi

Commentaires et avis

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

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

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 :)

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

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

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

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 ;)

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

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

Commentaire de night_enami le 15/01/2006 17:03:50

ok :) c comme tu veux ;)

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

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"

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

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 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 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 Problème de création de Trigger [ par vincentstryckmans ] Bonjour, J'ai un script qui crée, entre autres, une table et un trigger : CREATE TABLE "COMPOSANT" ( "ID_COMPOSANT" INTEGER NOT NULL, "F_COMP REQUETE SQL TRIGGER pk est-ce qu'il marche pas ??? [ par dinous ] SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO ALTER     trigger TI_ROLE on dbo.ROLE for insert as begin    & SQL Server & TRIGGER [ par kurky ] Bonjour, J'ai un problème sur ma base SQL Server. J'utilise une grosse base de données et il m'est impossible certaines fois de cré Trigger beforedelete vs delete rule de clef étrangère [ par vincentstryckmans ] Bonjour,Quelle est la meilleure solution pour effacer les record d'une table enfant lorsqu'un record de la table parent est effacé :1. Avoir une Quel outil pour SqlServer [ par padurand ] Mon site tourne avec une base de donnees Access, et des pages ASP.Je voudrais remplacer Access par SqlServer ... a priori il ne devrait pas y avoir de exporter des donnees de sqlserver 2005 vers access (dts) [ par tenrod ] Salut a tous ,Voila je travail avec une base sql server 2005 et je voudrais exporter le résultat d'une requete (a partir de ma base sql server) d SQLServer remplacer Null par 0 [ par BasicInstinct ] Bonjour tout le mondej'ai une requete plutot complexe qui calcule differents totaux selon des dates.lorsque pour un mois donné, je n'ai pas de va [trigger] Ajouter le n° de client lors d'une insertion d'enregistrement [ par gderenne ] Bonjour,J'ai développé un Trigger pour concevoir un n° de client de type 2006-00011 afin de l'ajouter à l'enregistrement que mon a


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales