|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : août 2010 Messages : 53 ![]() |
Bonjour,
Je fais mon stage et lors d'un traitement je dois utiliser un trigger mais je n'ai pas une grande idée sur les triggers alors je voudrais votre aide si c'est possible voila j'ai une table affect_utilisateur_poste(id_utilisateur,id_poste,date_debut_affect,date_fin_affect) je voudrais avant l'insertion vérifier le triplet (id_utilisateur,id_poste,date_debut_affect) si le nouveau triplet à inséré est égale a celui qui existe on fait rien si la date_debut_affect et inférieur a la date existante remplacer la date existante avec la nouvelle Je sais que c'est très basique mais j'ai besoin de votre aide comment faire merci. |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Les triggers sont déclenchés lors d'événements sur des objets. Dans votre cas, vous voulez remplacer un ordre INSERT par votre propre code. Il vous faut donc créer un trigger sur votre table, sur l’évènement INSERT, qui remplace l'insertion (INSTEAD OF INSERT) : Code SQL :
Dans votre code, vous pouvez effectuer des requêtes dans la pseudo table "INSERTED" qui à la même structure que la table sur laquelle porte le trigger, et qui contient les lignes insérées. Vous pouvez donc, en fonction du contenu de cette table et de la table cible, mettre le code qui convient, pour remplacer le fonctionnement normal d'une insertion par le fonctionnement que vous voulez. Gardez à l'esprit que ce code doit être le plus rapide possible, mettez donc les index nécessaires pour couvrir les requêtes de votre trigger |
||
|
|
00
|
|
|
#3 | ||||
|
Invité régulier
![]() Inscription : août 2010 Messages : 53 ![]() |
Merci pour la réponse
voila ce que j'ai fair : Code :
Code :
|
||||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Vous n'avez pas besoin de toutes ces variables.
De plus, certaines de vos requetes sont inutiles. Pensez aussi qu'il est possible en une seule requete d'inserer plusieurs lignes ! INSERTED peut donc contenir plusieurs lignes. Vous n'avez pas détaillé tous les cas possibles (par exemple si date_debut_affect est posterieure à la date dans la table) et vous ne détaillez pas non plus ce qu'il en est pour la date de fin Mais je pense que votre trigger peut se résumer en deux requêtes, un update et un insert, voire une seule avec un merge. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com