Trigger sous SQL SERVEUR 2000

Résolu
ashtheking Messages postés 229 Statut Membre -  
ashtheking Messages postés 229 Statut Membre -
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
--
Avant de poser ma question, j'ai essayer d'aider cinq personnes
Configuration: Windows 2003
Internet Explorer 7.0

2 réponses

  1. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    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
    1. ashtheking Messages postés 229 Statut Membre 97
       
      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
  2. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    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
    1. ashtheking Messages postés 229 Statut Membre 97
       
      Encore une fois, merci.
      Ca va bien m'aider à avancer.

      Problème résolu.
      0