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 :

Insertion dans deux tables liées [2008R2]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 285
    Par défaut Insertion dans deux tables liées
    Bonjour ,
    je cherche comment faire pour inserer des champs dans 2 tables SQL (Agent et Conjoint) qui sont liées par le champ PPR qui est une clé primaire de la table Agent et secondaire pour la table Conjoit , voilà ma proc mais elle marche pas quand j'execute mon code sur VS 2008 (je travaille avec ASP en c#)
    :

    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
     
    ALTER proc [dbo].[AjouterAgent]
     @ppr int,
    @lieu varchar(100),
    @adresspro varchar(100),
    @adressperso varchar(100),
    @telbureau varchar(100),
    @telgsm varchar(100),
    @email varchar(100),
     
     
    @np varchar(100),
    @proff varchar(100),
    @empl varchar(100),
    @retraite varchar(3),
    @TypeOperation nvarchar(1)
    as
    if(@TypeOperation = '0')
    begin tran
     
    	insert into Agent (PPR,LieuNaissance,AdressePro, AdressePerso , TelBureau,TelPerso,Email)
    	values (@ppr,@lieu,@adresspro, @adressperso,@telbureau,@telgsm,@email)
    	select Scope_Identity() as PPR 
     
    	 insert into Conjoint (PPR,NomPrenom , Profession, Employeur, Retraite) values (@ppr ,@np ,@proff,@empl,@retraite)
     
    commit
    s'il vous plait j 'ai besoin de votre aide ,MERCI

  2. #2
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 285
    Par défaut
    c'est cette erreur qui m'est affichée en C# quand je debug :

    Violation de la contrainte PRIMARY KEY « PK__Agent ». Impossible d'insérer une clé en double dans l'objet « dbo.Agent ». La valeur de clé dupliquée est (1).
    L'instruction a été arrêtée.
    si je comprend bien je dois pas insérer 2 fois une clé primaire dans la table Agent ,.......MAIS quand je teste ma requête d'insertion dans Agent sur SQL et j’insère des champs on supprimant PPR comme suite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into Agent (LeuNaissance,AdressePro, AdressePerso , TelBureau,TelPerso,Email)
        values (@lieu,@adresspro, @adressperso,@telbureau,@telgsm,@email)
        select Scope_Identity() as PPR
    On m'affiche une erreur qui dit que je peux pas insérer le PPR NULL :

    Msg 515, Niveau 16, État 2, Ligne 1
    Impossible d'insérer la valeur NULL dans la colonne 'PPR', table 'CVtech.dbo.Agent'. Cette colonne n'accepte pas les valeurs NULL. Échec de INSERT.
    L'instruction a été arrêtée.

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    En effet, vous ne pouvez pas insérer plusieurs fois la même clef primaire, c'est le principe d'une clef primaire !

    Il existe une fonctionnalité permettant d'attribuer automatiquement ces clefs, en déclarant la clef primaire comme IDENTITY.

    C'est a priori ce qu'il manque dans votre cas pour que votre dernière requête passe (en attribuant automatiquement au moment de l'insertion une valeur de clef, que vous pouvez ensuite en effet récupérer avec SCOPE_IDENTITY)

  4. #4
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 285
    Par défaut
    oui mais si vous regardiez mon code c# ci dessous vous allez voir que j'essai de recuperer mon code 'PPR' d'un textbox : ligne en gras


    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     protected void Button_validerinfo_Click(object sender, EventArgs e)
            {
                try
                {
                   
                    c.cmd = c.cn.CreateCommand();
                    c.cmd.CommandText = "AjouterAgent";
                    c.cmd.CommandType = CommandType.StoredProcedure; 
                    if (c.cn.State == ConnectionState.Closed)
                    {
                        c.cn.Open();
                    }
                    
                    c.cmd.Parameters.Add("@ppr", SqlDbType.Int); 
                    c.cmd.Parameters.Add("@lieu", SqlDbType.VarChar);
                    c.cmd.Parameters.Add("@adresspro", SqlDbType.VarChar);
                    c.cmd.Parameters.Add("@adressperso", SqlDbType.VarChar);
                    c.cmd.Parameters.Add("@telbureau", SqlDbType.VarChar);
                    c.cmd.Parameters.Add("@telgsm", SqlDbType.VarChar);
                    c.cmd.Parameters.Add("@email", SqlDbType.VarChar);
                     
                    c.cmd.Parameters.Add("@np", SqlDbType.VarChar);
                    c.cmd.Parameters.Add("@proff", SqlDbType.VarChar);
                    c.cmd.Parameters.Add("@empl", SqlDbType.VarChar);
                    c.cmd.Parameters.Add("@retraite", SqlDbType.VarChar);
                    c.cmd.Parameters.Add("@TypeOperation", SqlDbType.Int);
    
    
                  
                    c.cmd.Parameters["@ppr"].Value = TextBox_PPR.Text; 
                    c.cmd.Parameters["@lieu"].Value = TextBox_ln.Text;
                    c.cmd.Parameters["@adresspro"].Value = TextBox_adrspro.Text;
                    c.cmd.Parameters["@adressperso"].Value = TextBox_adrssperso.Text;
                    c.cmd.Parameters["@telbureau"].Value = TextBox_bureau.Text;
                    c.cmd.Parameters["@telgsm"].Value = TextBox_gsm.Text;
                    c.cmd.Parameters["@email"].Value = TextBox_email.Text; 
                    c.cmd.Parameters["@np"].Value = TextBox_npconj.Text;
                    c.cmd.Parameters["@proff"].Value = TextBox_prof.Text;
                    c.cmd.Parameters["@empl"].Value = TextBox_empl.Text;
                    c.cmd.Parameters["@retraite"].Value = DropDownList_retraite.SelectedValue;
                    c.cmd.Parameters["@TypeOperation"].Value = 0;
                    c.cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Response.Write(ex.Message);
                }
                finally
                {
                    if (c.cn.State == ConnectionState.Open)
                    {
                        c.cn.Close();
                    } 
                }
            }

  5. #5
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 285
    Par défaut
    le code PPR n 'est pas incrémenté c'est code que chaque individu doit posséder genre CIN

  6. #6
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 285
    Par défaut
    c'est c'est reglé , je devais mettre un update pas un INSERT -______-"

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

Discussions similaires

  1. problème insertion dans deux tables liées
    Par ryassinne dans le forum MySQL
    Réponses: 6
    Dernier message: 07/05/2010, 16h58
  2. [MySQL] Insertion dans deux tables liées
    Par franxi dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/06/2008, 21h22
  3. Insert dans deux tables en meme temps?
    Par radzar dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/04/2008, 11h33
  4. Insertion dans deux tables
    Par safiot85 dans le forum SQL
    Réponses: 13
    Dernier message: 05/12/2007, 23h14
  5. insertion dans deux tables
    Par bidule123456 dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/08/2007, 08h19

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