IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[trigger] Comment faire?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut [trigger] Comment faire?
    Bonjour,

    Voila dans ma base de données sql server 2005 express, j'ai 2 tables:
    PROFIL_PRO ( PRO_ID, PRO_LIB) clé primaire PRO_ID
    FORMULAIRE_FORM ( FORM_NOM, FORM_DESC) clé primaire FORM_NOM

    La relation entre les deux etant de type 1,n - 0,n, j'ai la table association suivante:
    AVOIR_DROIT ( PRO_ID, FORM_NOM, CONSULTATION, AJOUT, SUPPRESSION, MOIFICATION)
    ou PRO_ID, FORM_NOM sont tout les deux clé primaires et etrangeres, et les 4 autres proprietes sont des booleen.

    Voila en fait j'aimerais faire un trigger, qui , sur l'ajout d'une ligne dans FORMULAIRE_FORM, créerait automatiquement les lignes associations par defaut.

    Exemple:
    j'ai 2 profils (1, 'admin') (2, 'consultant')

    Si j'ajoute une ligne dans FORMULAIRE_FORM (candidat, 'le formulaire de...')

    Alors il me créé automatiquement:
    (1, candidat, 0,0,0,0)
    (2, candidat, 0,0,0,0)

    Voila, mais je ne sais pas trop comment faire. J'ai deja un debut de trigger:

    SETANSI_NULLSON
    GO
    SETQUOTED_IDENTIFIERON
    GO
    CREATETRIGGER droits_defaut
    ON FORMULAIRE_FORM
    AFTER
    INSERT
    AS
    BEGIN

    SETNOCOUNTON;
    -- Je ne sais pas quoi mettre
    END
    GO

    Pouvez-vous m'aider s'il vous plait? merci

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Est ce que vos tables sont reliées par des clés étrangères ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut
    Oui comme je l'ai dit j'ai:

    PROFIL_PRO ( PRO_ID, PRO_LIB) clé primaire PRO_ID
    FORMULAIRE_FORM ( FORM_NOM, FORM_DESC) clé primaire FORM_NOM

    La relation entre les deux etant de type 1,n - 0,n, j'ai la table association suivante:
    AVOIR_DROIT ( PRO_ID, FORM_NOM, CONSULTATION, AJOUT, SUPPRESSION, MOIFICATION)
    ou PRO_ID, FORM_NOM sont tout les deux clé primaires et etrangeres, et les 4 autres proprietes sont des booleen

    Se qui donne ca visuellement:

    le mcd


    le mld

    merci

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Dans ton model physique oui, mais est ce que tu l'as faits dans ta base de données ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut
    oui bien sur j'ai une troisieme table comme je l'ai indiqué.
    Mon pb est plus au niveau du trigger que je ne sais pas trop comment mettre en place.

    Je ne vois pas vraiment ou tu veux en venir, peut etre n'ais-je pas compris.

  6. #6
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    en deux mots, tu dois mettre dans ton trigger les instructions INSERT que tu veux. Pour connaître le contenu des enregistrements que tu viens d'insérer et qui ont déclenché le trigger, utilise la table virtuelle inserted, qui est disponible dans le scope de ton trigger.
    Exemple qqch comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO tatable
    SELECT i.id, 'candidat', ...
    FROM inserted i
    Pour 'candidat', essaie de normaliser tes tables en créant des tables de référence.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut
    Citation Envoyé par rudib
    Pour 'candidat', essaie de normaliser tes tables en créant des tables de référence.
    Bonjour,
    Que veux tu dire par normaliser?

    merci

  8. #8
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Ce sont des principes de conception de la structure de tes tables. Tu as plus d'explications ici : http://sqlpro.developpez.com/cours/standards/

    L'idée est d'éviter de créer de la redondance et du stockage inutile. Mais pour parler de ça je me suis inspiré seulement de tes lignes
    Alors il me créé automatiquement:
    (1, candidat, 0,0,0,0)
    (2, candidat, 0,0,0,0)
    Ton modèle a l'air d'être différent.

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut
    Je n'ai pas de redondance dans mes données, je ne vois pas ou est le pb ce se coté la.

    j'ai juste une association profil-formulaire qui engendre tel ou tel droits grace au booleen.

    c'est juste que lorsque j'ajoute un formulaire dans la table FORMULAIRE_FORM, il faut que ce créé automatiquement les droits par defaut dans avoir_droit, c'est a dire créé autant de lignes avoir_droit que de profil.

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut
    Merci j'ai reussi.

    Merci de mavoir mi sur la piste. Le code pour ceux que ca pourrait aider:

    CREATE TRIGGER droits_defaut
    ON FORMULAIRE_FORM
    AFTER INSERT
    AS
    DECLARE @nomform VARCHAR(32)
    BEGIN

    SELECT @nomform = FORM_NOM FROM INSERTED

    INSERT INTO AVOIR_DROIT
    SELECT PRO_ID, @nomform, 0,0,0,0
    FROM PROFIL_PRO

    END
    GO

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire un trigger after update multiple
    Par java250r dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/08/2012, 17h20
  2. Comment faire un trigger
    Par momoh dans le forum Signal
    Réponses: 1
    Dernier message: 04/12/2007, 22h28
  3. Comment faire un Cron ou Trigger
    Par dorian53 dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 29/08/2005, 11h39
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo