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
A voir également:

2 réponses

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 383
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 97
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 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 383
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 97
1 juil. 2008 à 08:12
Encore une fois, merci.
Ca va bien m'aider à avancer.

Problème résolu.
0