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 :

probleme valeur variable


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Points : 15
    Points
    15
    Par défaut probleme valeur variable
    Bonjour,
    je travaille sur SQL Server 2005

    Je met à jour une table, puis je voudrais recuperer la clé primaire automatique
    dans une variable pour mettre à jour d'autre table avec la valeur de ma table en clé etrangere.

    Mon processus est le suivant :
    via SSIS, je charge une table temporaire, puis un trigger appelle ma procédure stockée pour faire le traitment attendu.

    Voici ma procédure

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    DECLARE @TEMP_ID_BDM INT
     
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
      -------------------------------------------------------------------
      -- Insertion ou mise a jour du client dans la table individu     --
      -------------------------------------------------------------------
     
      IF NOT EXISTS(SELECT ID_BDM FROM INDIVIDU WHERE last_name=@Nom and first_name=@Prenom)
    	BEGIN
    	-- Insertion
    	INSERT INTO BDM.dbo.individu
               (iup_individu 
               ,iup_foyer
               ,ind_cre_dte
               ,ind_upd_dte     
               ,title
               ,last_name
               ,first_name
               ,date_de_naissance_attendue
               ,Profession)
         VALUES
               (CONVERT(char(10),@IUP_Individu),
               CONVERT(char(10),@IUP_Foyer),
               CONVERT(datetime,@Dte_cre_compte ),
               CONVERT(datetime,@Dte_MAJ_compte ),
               CONVERT(varchar(20),@Civilite ),
               CONVERT(varchar(50),@Nom ),
               CONVERT(varchar(50),@Prenom ),
               CONVERT(datetime,@DatedeNaissance ),
               CONVERT(varchar(50),@profession ))
      END
    	-- Mise a jour 
      ELSE UPDATE BDM.dbo.individu
       SET iup_individu = CONVERT( char(10),@IUP_Individu),
           iup_foyer = CONVERT( char(10),@IUP_Foyer),
           ind_cre_dte =CONVERT(datetime, @Dte_cre_compte), 
           ind_upd_dte = CONVERT(datetime,@Dte_MAJ_compte), 
           title =CONVERT(varchar(20),@Civilite), 
           last_name = CONVERT(varchar(50),@Nom), 
           first_name = CONVERT(varchar(50),@Prenom), 
           date_naissance = CONVERT(datetime,@DatedeNaissance), 
           profession = CONVERT( varchar(50),@Profession)
     WHERE last_name=@Nom and first_name=@Prenom
     
    commit
     
    	-- Recuperation de ID_BDM
    	-- Critere de recuperation de ID_BDM
        -- Recuperation de ID_BMD pour la mise à jour des tables filles
    SELECT  @TEMP_ID_BDM=ID_BDM FROM DBO.INDIVIDU WHERE last_name=@Nom and first_name=@Prenom
     
     
        ----------------------------------------
    	-- Insertion dans la table compte     --
        ----------------------------------------
     
    	-- Verification existence
    IF NOT EXISTS(SELECT ID_BDM FROM COMPTE WHERE ID_BDM=@TEMP_ID_BDM)
    	-- Insertion
        BEGIN
    	INSERT INTO BDM.dbo.compte
               (id_bdm
    		   ,cpt_id
               ,login
               ,password
               ,acc_answer
               ,acc_question
               ,acc_cre_dte
               ,acc_upd_dte)
         VALUES
               ( CONVERT(int,@TEMP_ID_BDM),
                CONVERT(INT,@Ident_compte), 
                CONVERT(varchar(50),@Login), 
                CONVERT(varchar(50),@Mot_passe), 
                CONVERT(varchar(300),@Rep_quest_oubli_mot_passe),
                CONVERT(varchar(300),@Quest_oubli_mot_passe), 
                CONVERT(datetime,@Dte_cre_compte), 
                CONVERT(datetime,@Dte_MAJ_compte) )
        END
    	-- Mise a jour 
        ELSE UPDATE BDM.dbo.compte
       SET id_bdm = @TEMP_ID_BDM,
          cpt_id= @Ident_compte,
          login = CONVERT(varchar(50),@Login),
          password = CONVERT(varchar(50),@Mot_passe),
          acc_answer = CONVERT(varchar(300),@Rep_quest_oubli_mot_passe),
          acc_question = CONVERT(varchar(300),@Quest_oubli_mot_passe),
          acc_cre_dte = CONVERT(datetime,@Dte_cre_compte),
          acc_upd_dte = CONVERT(datetime,@Dte_MAJ_compte)
     WHERE ID_BDM=@TEMP_ID_BDM
    Et voici mon message d'erreur, lorsque je teste mon import via SSIS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [Destination pour SQL Server [597]] Erreur : « Une erreur OLE DB s'est produite. Code d'erreur : 0x80040E2F. 
     Un enregistrement OLE DB est disponible. Source : « Microsoft SQL Native Client » Hresult : 0x80040E2F Description :
     « L'instruction a été arrêtée. ». Un enregistrement OLE DB est disponible.
     Source : « Microsoft SQL Native Client » Hresult : 0x80040E2F Description : 
     « Impossible d'insérer la valeur NULL dans la colonne 'id_bdm', table 'BDM.dbo.compte'. 
     Cette colonne n'accepte pas les valeurs NULL. Échec de INSERT. ».  »

    Je ne comprend pas pourquoi il me dit que j'ai une valeur null alors que je recupère l'id

    Si quelqu'un a une idée...

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Rarement vu un code aussi mauvais...

    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
    DECLARE @NEWID INT, @RWCNT INT, @ERROR INT
     
    -- commencer par virer tout vos convert ils sont inutiles !!!
    -- votre but est-il de faire perdre du temps au serveur ???
     
    -- remplacez le IF NOT EXIST par une sous requête sinon il se peut qu'entre le IF NOT EXISTS
    -- et votre INSERT quelque'un fasse la même chose. Sinon utilisez une transaction au niveau d'isolation SERIALIZABLE
     
        INSERT INTO BDM.dbo.individu
               (iup_individu 
               ,iup_foyer
               ,ind_cre_dte
               ,ind_upd_dte     
               ,title
               ,last_name
               ,first_name
               ,date_de_naissance_attendue
               ,Profession)
         SELECT @IUP_Individu, @IUP_Foyer, @Dte_cre_compte, ...
         WHERE NOT EXISTS(SELECT ID_BDM
                          FROM   INDIVIDU 
                          WHERE  last_name = @Nom 
                            AND  first_name=@Prenom);
         SELECT @ERROR = @@ERROR, @RWCNT = @@ROWCOUNT, @NEWID = @@SCOPE_IDENTITY;
         IF @ERROR <> 0 GOTO LBL_ERROR;
         IF @RWCNT = 0
           UPDATE BDM.dbo.individu
           SET iup_individu =  @IUP_Individu,
               iup_foyer =  @IUP_Foyer,
               ind_cre_dte = @Dte_cre_compte, 
               ind_upd_dte = @Dte_MAJ_compte, 
               title = @Civilite, 
               last_name =  @Nom, 
               first_name =  @Prenom, 
               date_naissance =  @DatedeNaissance, 
               profession =  @Profession,
               @NEWID = ??? --> colonne auto incrémentée
           WHERE last_name=@Nom AND first_name=@Prenom;
         SELECT @ERROR = @@ERROR, @RWCNT = @@ROWCOUNT + @RWCNT;
         IF @ERROR <> 0 OR  @RWCNT = 0 GOTO LBL_ERROR;
     
    ...
     
    COMMIT TRANSACTION
     
    RETURN
     
    LBL_ERROR:
     
    ROLLBACK TRANSACTION
    apprenez à gérer vos transaction et à utiliser proprement l'auto incrément. Tout est à récrire dans votre proc stocK

    Pensez à faire une formation, ce sera du temps de gagner !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/11/2011, 18h37
  2. probleme valeur variable
    Par xargin dans le forum VBA Access
    Réponses: 7
    Dernier message: 22/08/2011, 13h47
  3. [langage] Probleme de variable transfert de contenu
    Par Ludo167 dans le forum Langage
    Réponses: 10
    Dernier message: 08/07/2004, 11h40
  4. [algo]probleme de variables hotes ds un insert
    Par omega dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/03/2004, 09h03
  5. Réponses: 2
    Dernier message: 04/01/2004, 15h14

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