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 :

@@identity en paramètre de sortie


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut @@identity en paramètre de sortie
    Bonjour,
    j'ai réalisé la procédure stockée suivante sous sql server

    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
    CREATE PROC ps_InsertCde
    (
    	@date datetime = null,
    	@etat varchar(10) = null,
    	@montant numeric(10,2) = null,
    	@acompte numeric(10,2) = null,
    	@no_client tinyint = null,
    	@id_cde tinyint OUTPUT
    )
    AS
     
    /* Test si la date est vide */
    IF @date IS NULL
    BEGIN
    	raiserror('Insertion impossible : la date de commande n''a pas été 
     
    renseignée.', 16, 1)
    	return
    END
     
    /* Test si l'état est vide */
    IF @etat IS NULL
    BEGIN
    	raiserror('Insertion impossible : l''état de la commande n''a pas été 
     
    renseigné.', 16, 1)
    	return
    END
     
    /* Test si le montant est vide */
    IF @montant IS NULL
    BEGIN
    	raiserror('Insertion impossible : le montant de la commande n''a pas été 
     
    renseigné.', 16, 1)
    	return
    END
     
    /* Test si l'acompte est vide */
    IF @acompte IS NULL
    BEGIN
    	raiserror('Insertion impossible : l''acompte de la commande n''a pas été 
     
    renseigné.', 16, 1)
    	return
    END
     
    /* Test si la date est vide */
    IF @no_client IS NULL
    BEGIN
    	raiserror('Insertion impossible : le numéro du client n''a pas été 
     
    renseigné.', 16, 1)
    	return
    END
     
    /* On insère la commande */
    INSERT INTO commande(date_cde, etat_cde, montant, acompte, no_client)
    VALUES(@date, @etat, @montant, @acompte, @no_client)
     
    SELECT @id_cde = (SELECT DISTINCT @@identity FROM commande)

    Or, lorsque je la teste comme ci dessous, je n'ai rien dans mon paramètre de sortie @id_cde.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE @id_cde tinyint
    DECLARE @num_cde tinyint
    EXEC @num_cde = ps_InsertCde '16/06/2005', 'En cours', 135.2, 159.5, 2, @id_cde OUTPUT
     
    PRINT @num_cde
    Comment résoudre ce problème ?

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut

    c'est pas plutôt ça qu'il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT @id_cde = @@IDENTITY
    SELECT @id_cde
    au lieu de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT @id_cde = (SELECT DISTINCT @@identity FROM commande)
    Tu veux bien récupérer l'id de la commande que tu viens d'insérer c'est ça :

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    En remplaçant par ton code, j'ai toujours le même problème...

    Lorsque je fais le code suivant, cela m'affiche 0...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE @id_cde tinyint 
    DECLARE @num_cde tinyint 
    EXEC @num_cde = ps_InsertCde '16/06/2005', 'En cours', 135.2, 159.5, 2, @id_cde OUTPUT 
     
    PRINT @num_cde
    Comment cela se fait ?

    PS: C'est bien l'id de la commande insérée que je veux récupérer.

  4. #4
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    As-tu essayé en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DECLARE @id_cde tinyint ,
    EXEC ps_InsertCde '16/06/2005', 'En cours', 135.2, 159.5, 2, @id_cde OUTPUT
    SELECT @id_cde
    Dans ta BD, tu es sur que ce qui correspond à @num_cde est un tinyint et non pas un int ?

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    Oui le type est bien tinyint.
    Par contre, maintenant, j'arrive à afficher le résultat de la procédure stockée.
    Mais je n'arrive pas à la récupérer sous Delphi avec un TADOStoredProc... si tu as une idée pour réaliser cette opération...

    Merci d'avance

  6. #6
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    j'y connais absolument que dale en Delphi désolé
    Pose plutôt la question sur le forum Delphi, tu auras plus de chance qu'ici.

    PS : pense au tag si ton pb est résolu

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    C'est bon, j'ai réussi à résoudre mes problèmes.
    Merci beaucoup de ton aide.

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

Discussions similaires

  1. Paramètre de sortie!!
    Par dongnold dans le forum Langage
    Réponses: 3
    Dernier message: 09/02/2006, 21h31
  2. Paramètre de sortie
    Par yAnSoLo82 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 19/01/2006, 14h51
  3. [Débutant]Procédure avec paramètres entrée / sortie
    Par jeromejanson dans le forum Langage
    Réponses: 13
    Dernier message: 10/10/2005, 08h30
  4. Affectation du résultat d'une ps sans paramètre de sortie
    Par PERRIN38 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/08/2005, 15h43
  5. Récupération des paramètres en sortie d'1 procédure stockée
    Par navis84 dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/12/2004, 11h40

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