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

Développement SQL Server Discussion :

Trigger à l'insertion


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2016
    Messages : 28
    Par défaut Trigger à l'insertion
    Bonsoir
    j'ai un problème avec un trigger
    En effet j'ai une base de donnée dans laquelle j'ai deux tables A et B

    Avec A (Nom, prenom)
    Avec B (Nom, prenom, age, profession)

    NB: Nom et prénom est la clé primaire de A et clé étrangère de B
    De sortes que si le nom et prénom n'existe pas dans A on ne peut insérer les données dans B

    Je voudrais avant insertion des données dans la table B, récupérer Le nom et prénom avec trigger pour remplir A Avant B.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    CREATE TRIGGER TRG_InsertActeur
    ON A
    FOR INSERT
    AS
    	BEGIN
    		DECLARE @Nom_acteur varchar(50)
    		DECLARE @Prenom_acteur varchar(50)
     
    		SET @Nom_acteur = 
    		(
    			SELECT NOM
    			FROM INSERTED
    		);
    		SET @Prenom_acteur = 
    		(
    			SELECT PRENOM
    			FROM INSERTED
    		);
    		BEGIN
                        INSERT INTO B (NOM, PRENOM) values (@Nom_acteur, @Prenom_acteur);
    		END
    	END
    GO
    INSERT INTO ACTEUR(Profession,Age, NOM, PRENOM) VALUES
    (
    	NULL, '50','Craig', 'Daniel'
    );

    Ce qui met le message d'erreur suivant
    L'instruction INSERT est en conflit avec la contrainte FOREIGN KEY "clé_étrangère_acteur". Le conflit s'est produit dans la base de données "videoclub", table "dbo.A".
    L'instruction a été arrêtée.
    Aidez moi à trouver la solution.
    Merci

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Dans ce cas, il faut que le trigger soit déclenché lors de l'insertion de données dans la table B, et non dans la table A.

    Ici, ton trigger se déclenche lors de l'insertion de données dans la table A et essaie d'ajouter des données dans la table B. Exactement le contraire de ce que tu souhaites faire !

    Il faut que ton trigger se déclenche lors de l'ajout d'enregistrements dans B. Par contre, tu vas devoir utiliser un trigger INSTEAD OF au lieu d'un FOR. Et ton trigger devra alors gérer l'insertion des données dans B après avoir vérifier l'existence de ces données dans A.

    Pour l'insertion de données, tu peux aussi regarder du côté des procédures stockées (ce qui me semblerait d'ailleurs plus adaptés dans ton cas).

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2016
    Messages : 28
    Par défaut
    Oui désolé j'ai fait une petite erreure en voulant partager le Trigger. Car en effet mon trigger devrait se déclencher comme tu l'as dit lors de l'insertion mais cela ne marche pas.
    j'ai éssayer en remplaçant 'FOR' par ' INSTEAD OF' mais malheureusement dans la table A, l'information est insérer mais pas dans la table B.
    Si vous pouvez me donner un exemple à suivre .....cela m'aiderait merci

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par midochel Voir le message
    j'ai éssayer en remplaçant 'FOR' par ' INSTEAD OF' mais malheureusement dans la table A, l'information est insérer mais pas dans la table B.
    Comme dit dans mon précédent message, il est nécessaire de réaliser l'insertion dans le trigger, car un trigger INSTEAD OF remplace le INSERT par l'exécution du trigger, tandis qu'un trigger FOR AFTER est déclenché une fois les enregistrements insérés.

    Donc ton trigger doit avoir 2 INSERTs : un qui vise la table A (c'est déjà le cas), un deuxième qui vise la table B.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2016
    Messages : 28
    Par défaut
    Merci j'ai compris le principe mais je suis un débutant dans l'utilisation de trigger et donc je ne sais comment inserer deux INSERTS dans un même trigger.
    Pourrais je avoir un exemple proche de mon problème.

  6. #6
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Tout simplement les uns derrières les autres.

    A noter également que les triggers sont ensemblistes, c'est-à-dire qu'une instruction INSERT qui insérerait 3 lignes n'appellera qu'une seule fois le trigger (et dans le trigger, la table INSERTED contiendra les 3 lignes). Actuellement, le trigger ne supporte pas cela.

    Enfin, le choix de la clé primaire n'est pas des plus adapté. En général, on évite des clés primaires sur des chaînes de caractères. Il vaut mieux utiliser une colonne autoincrémentée et ajouter une contrainte d'unicité englobant vos deux colonnes nom et prénom (en supposant qu'il ne peut donc y avoir d'homonyme). Outre le côté performance, ici d'un point de vue modélisation cela sera beaucoup mieux, puisque cela sera plus robuste aux changements de nom.

Discussions similaires

  1. Insert avec select sur table avec Trigger d'insertion
    Par bran_noz dans le forum Développement
    Réponses: 5
    Dernier message: 23/12/2005, 14h38
  2. pb trigger lors insertion enregistrment!
    Par tooneygirl dans le forum Oracle
    Réponses: 9
    Dernier message: 06/12/2005, 22h57
  3. Créer un trigger "before insert" avec SQL Server
    Par bubi dans le forum Développement
    Réponses: 2
    Dernier message: 14/11/2005, 10h12
  4. [trigger] update inserted?
    Par cosminutza dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/06/2005, 09h37
  5. Trigger et insert
    Par jf-nigou dans le forum Oracle
    Réponses: 5
    Dernier message: 16/02/2005, 16h45

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