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 :

Recuperer un champ output dans Procedure


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 34
    Points : 29
    Points
    29
    Par défaut Recuperer un champ output dans Procedure
    Bonjour, je suis en trainde developper des procedures stockées dont 2 qui s'appelent ensemble.


    Voici la premiere : SAVE_CLIENT
    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
     
    CREATE PROCEDURE [SAVE_CLIENT] (
    	@pPER_ID bigint OUTPUT,
    	@pPER_NOM varchar(50),
    	@pPER_PRENOM varchar(50),
    	@pPER_EMAIL varchar(50),
    	@pPER_PASSWORD varchar(50),
    	@pPER_TELEPHONE varchar(15),
    	@pPER_MOBILE varchar(15),
    	@pPER_DELETED bit
    )AS
    BEGIN
    	DECLARE @myCount bigint;
     
    	--Execution de la procedure stockee
    			EXEC SAVE_PERSONNE @pPER_ID, @pPER_NOM, @pPER_PRENOM, @pPER_EMAIL, @pPER_PASSWORD, @pPER_TELEPHONE, @pPER_MOBILE, @pPER_DELETED 
     
    	-- Comptage
    	SELECT @myCount = count(PER_ID) FROM CLIENT WHERE PER_ID = @pPER_ID;
     
    	IF @myCount is null OR @myCount=0
    		BEGIN
     
    			INSERT INTO CLIENT ([PER_ID]) VALUES (@pPER_ID);
     
    			SET @pPER_ID = @@IDENTITY;
    		END
    END
    GO
    la procedure appelée SAVE_PERSONNE

    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
     
    CREATE PROCEDURE [SAVE_PERSONNE] (
    	@pPER_ID bigint OUTPUT,
    	@pPER_NOM varchar(50),
    	@pPER_PRENOM varchar(50),
    	@pPER_EMAIL varchar(50),
    	@pPER_PASSWORD varchar(50),
    	@pPER_TELEPHONE varchar(15),
    	@pPER_MOBILE varchar(15),
    	@pPER_DELETED bit
    )AS
    BEGIN
    	DECLARE @myCount bigint;
     
    	-- Comptage
    	SELECT @myCount = count(PER_ID) FROM PERSONNE WHERE PER_ID = @pPER_ID;
     
    	IF NOT @myCount is null AND @myCount<>0
    		BEGIN
    			UPDATE PERSONNE SET
    			PER_NOM = @pPER_NOM,
    			PER_PRENOM = @pPER_PRENOM,
    			PER_EMAIL = @pPER_EMAIL,
    			PER_PASSWORD = @pPER_PASSWORD,
    			PER_TELEPHONE = @pPER_TELEPHONE, 
    			PER_MOBILE = @pPER_MOBILE, 
    			PER_DELETED = @pPER_DELETED
    			WHERE PER_ID = @pPER_ID;
    		END
    	ELSE
    		BEGIN
    			INSERT INTO PERSONNE ([PER_NOM], [PER_PRENOM], [PER_EMAIL], [PER_PASSWORD],
    			[PER_TELEPHONE], [PER_MOBILE], [PER_DELETED]) VALUES
    			(@pPER_NOM, @pPER_PRENOM, @pPER_EMAIL, @pPER_PASSWORD, @pPER_TELEPHONE, 
    			 @pPER_MOBILE, @pPER_DELETED);
     
    			SET @pPER_ID = @@IDENTITY;
    		END
    END
    GO
    quand j'appelle ma procedure SAVE_CLIENT, je lui passe null en id afin de lui dire qu'il doit faire un insert. seulement il insert bien dans personne mais je recupere pas l'id qui vient d'etre genere pour l'inscrire dans la table CLIENT.

    pourriez vous m'aider svp !

    Merci

    bien cordialement,

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Il faut en fait aussi préciser à l'appel que la variable est en OUTPUT.
    Cela donne :

    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
    CREATE PROCEDURE [SAVE_CLIENT] (
    	@pPER_ID bigint OUTPUT,
    	@pPER_NOM varchar(50),
    	@pPER_PRENOM varchar(50),
    	@pPER_EMAIL varchar(50),
    	@pPER_PASSWORD varchar(50),
    	@pPER_TELEPHONE varchar(15),
    	@pPER_MOBILE varchar(15),
    	@pPER_DELETED bit
    )AS
    BEGIN
    	DECLARE @myCount bigint;
     
    	--Execution de la procedure stockee
    			EXEC SAVE_PERSONNE @pPER_ID OUTPUT, @pPER_NOM, @pPER_PRENOM, @pPER_EMAIL, @pPER_PASSWORD, @pPER_TELEPHONE, @pPER_MOBILE, @pPER_DELETED 
     
    	-- Comptage
    	SELECT @myCount = count(PER_ID) FROM CLIENT WHERE PER_ID = @pPER_ID;
     
    	IF @myCount IS NULL OR @myCount=0
    		BEGIN
     
    			INSERT INTO CLIENT ([PER_ID]) VALUES (@pPER_ID);
     
    			SET @pPER_ID = @@IDENTITY;
    		END
    END
    GO
    Remplacez @@IDENTITY par SCOPE_IDENTITY(), dont l'étendue est limitée à la session courante, alors que @@IDENTITY a une étendue "limitée" à la base de données

    @++

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 34
    Points : 29
    Points
    29
    Par défaut
    Super, merci elsuket je savais pas qu'il fallait mettre aussi la variable en output !

    puis merci pour le SCOPE_IDENTITY() je le conaissais pas

    Bonne journée !

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

Discussions similaires

  1. recuperer un champ texte dans ("Word.Application")
    Par troxsa dans le forum VBScript
    Réponses: 2
    Dernier message: 04/06/2009, 14h27
  2. Réponses: 2
    Dernier message: 07/08/2007, 19h48
  3. champ dynamiques dans une procedure stockée
    Par augereau dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/11/2005, 07h52
  4. Réponses: 5
    Dernier message: 25/07/2005, 14h03
  5. Recuperer un champ calculé dans une variable....
    Par vijeo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/12/2004, 14h57

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