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 :

Procédures stockées Output


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Points : 55
    Points
    55
    Par défaut Procédures stockées Output
    Bonjour,

    Voilà, j'ai une procédure stockée avec un output qui devrait me renvoyer 0 s'il existe sinon l'ID nouvellement inséré:

    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
    ALTER PROCEDURE [dbo].[InsertAnnonceur]
    	@Responsable varchar(250),
    	@email varchar(250),
    	@Annonceur_id BIGINT OUTPUT
     
    AS
    BEGIN
    	SET NOCOUNT ON;
     
    	IF (SELECT COUNT(*) FROM dbo.annonceurs WHERE email=@email) > 0
    		BEGIN
    			SELECT @Annonceur_id = 0;
    		END
    	ELSE
    			INSERT INTO dbo.annonceurs(Responsable,Email)
    			VALUES
    			(@responsable,@Email);
    			SELECT @Annonceur_id = @@IDENTITY;
    END
    Malheureusement quand je l'éxecute :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE @Retour BigINt;
     
    exec dbo.InsertAnnonceur @Responsable = 'test',@email='test@sda.sdq',@Annonceur_id=@Retour OUTPUT;
     
    PRINT @Retour;
    J'ai bien mon nouvel ID si l'email n'est pas présent, en revanche, s'il est présent je reçois l'ID de la ligne.

    Sauriez vous pourquoi?

    D'avance merci!!

  2. #2
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Il manque un BEGIN ... END pour votre bloc ELSE.

    Du coup SELECT @Annonceur_id = @@IDENTITY est exécuté dans tous les cas

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Points : 55
    Points
    55
    Par défaut
    C'est parfait!!

    Merci pour cette réponse rapide!!

    Bonne journée.

  4. #4
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    au passage, il me semble que votre SP peut s'écrire simplement comme ceci :

    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
     
    ALTER PROCEDURE [dbo].[InsertAnnonceur]
    	@Responsable varchar(250),
    	@email varchar(250),
    	@Annonceur_id BIGINT OUTPUT
     
    AS
    BEGIN
    	SET NOCOUNT ON;
     
    	INSERT INTO dbo.annonceurs (Responsable, Email)
    		SELECT @Responsable, @email
    		WHERE NOT EXISTS(
    			SELECT 1 
    			FROM dbo.annonceurs 
    			WHERE Email = @email
    		)
     
     
    	SET @Annonceur_id = COALESCE(SCOPE_IDENTITY(), 0)
     
    END

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Points : 55
    Points
    55
    Par défaut
    Merci pour ces précisions!

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

Discussions similaires

  1. [XL-2010] Pas de retour sur un paramètre output depuis une procédure stockée oracle
    Par darmet dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/07/2014, 14h47
  2. Procédure stockée et paramètre output
    Par Kropernic dans le forum VB.NET
    Réponses: 3
    Dernier message: 18/07/2013, 10h33
  3. [Débutant] Appel d'une procédure stockée avec paramètre en output
    Par Malainet dans le forum Linq
    Réponses: 5
    Dernier message: 11/02/2013, 16h26
  4. Réponses: 6
    Dernier message: 15/09/2010, 18h02
  5. Réponses: 4
    Dernier message: 17/12/2007, 08h29

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