Trigger sous SQL SERVEUR 2000

Résolu/Fermé
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
- 25 juin 2008 à 10:46
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
- 1 juil. 2008 à 08:12
Bonjour,

N'étant pas développeur, cette question me parait insurmontable mais je suis sûr qu'en fait c'est hyper facile.

Voilà, je cherche à créer un trigger qui lors d'un INSERT vérifiera d'abord que le NOMUTIL (une colonne) n'existe pas déjà avant de valider l'entrée ou de le rejeter (si le nom existe déjà).

Ma table se nomme UTIL, elle possède six colonne : IDUTIL (clé primaire autoincrémenté), NOMUTIL, EMAILUTIL, SEXEUTIL et SALAIRE UTIL.

Pourriez-vous, svp, me donner, ne serait qu'un bout de la syntaxe a utiliser ( j'ai déjà
CREATE TRIGGER pasdedoublon
ON util
INSTEAD OF insert

AS

....
Merci d'avance

2 réponses

Christounet
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 374
25 juin 2008 à 11:58
Bonjour,

Si tu veux éviter d'avoir deux fois la même valeur pour la colonne NOMUTIL, tu peux créer un index unique sur cette colonne et tu n'auras pas besoin d'un trigger
create unique index id_nomutil on util(nomutil)


A plus
0
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
96
25 juin 2008 à 13:33
UN grand, un très grand MERCI à Christounet pour ta réponse que je vais m'empresser d'utiliser.

Néanmoins, pour édification personelle, j'aimerai quand même connaître la requête du trigger anti doublon.
0
Christounet
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 374
25 juin 2008 à 14:09
Bonjour,

Alors le code devrait être le suivant (je ne l'ai pas testé)
CREATE TRIGGER pasdedoublon
ON util
FOR INSERT
AS 
DECLARE @rows int
SELECT @Rows = COUNT(*)
  FROM util u JOIN INSERTED i ON u.nomutil = i.nomutil
IF @Rows > 0
BEGIN
   ROLLBACK -- on annule l'insertion
   RAISERROR ('Nom utilisateur déjà existant',10,1)
   RETURN
END

Lors de l'instruction INSERT la table temporaire inserted contiens les nouvelles valeurs, donc on vérifie avec l'instruction count(*) le nombre de fois que le nomutil existe déjà. Si c'est plus grand que 0 (juste un petit doute, peut-être faut-il tester sur plus grand que 1), on annule la transaction en cours et génère un message d'erreur.

A plus
0
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
96
1 juil. 2008 à 08:12
Encore une fois, merci.
Ca va bien m'aider à avancer.

Problème résolu.
0