Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1815 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL SERVER 2008] : Parametre OUTPUT qui sort pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL SERVER 2008] : Parametre OUTPUT qui sort pas

n°2050354
Iaire
Posté le 20-01-2011 à 01:41:26  profilanswer
 

[img]Bonjour,  
Petit probleme de newbie avec une procédure stockée SQLSERVER 2008 R2,  
Je déclare un parametre OUTPUT, et la procédure refuse de s'executer au motif que je n'ai pas préciser dans son execution la valeur de ce parametre est-ce normal ?
Quand tout se passe bien, et que ma ligne est inserée toujours pas de retour !


CREATE PROCEDURE toto  
@Param1 INT,  
@Param2 INT OUTPUT  
AS
SET @Param2 = ( SELECT TOP 1 Param2 FROM maTable WHERE Param1 = @Param1)
IF @Param2 IS NULL  
INSERT INTO maTable(Param1) VALUES(@Param1)
SET @Param2 = SCOPE_IDENTITY()
ELSE  
 RAISERROR('Il existe deja %d', 10, 1, @Param2)


Merci pour votre aide

mood
Publicité
Posté le 20-01-2011 à 01:41:26  profilanswer
 

n°2050362
Oliiii
Posté le 20-01-2011 à 08:34:13  profilanswer
 

Ca marche tres bien ici.
Il manque un BEGIN et un END dans le IF de ta procedure mais je suppose que ca a ete effacé en simplifiant la proc.

n°2050370
Iaire
Posté le 20-01-2011 à 09:25:59  profilanswer
 

Oui, désolé, je les ai oublié au passage.
Mon probleme demeure je suis obligé de préciser un default pour le parametre OUT, sinon, message d'erreur sur la ligne 0  
A l'éxecution j'ai juste le renvoi du nombre de ligne affecté.  
Le plus genant c'est le fait que je ne puisse recuperer la Param2 en sortie.  
Erreur de ma part, voila mes appels test  
EXEC toto @Param1 = 1, @Param2 OUTPUT  
Msg 137, Niveau 15, État 2, Ligne 1
La variable scalaire "@Param2" doit être déclarée.
EXEC toto @Param = 1
Msg 201, Niveau 16, État 4, Procédure toto, Ligne 0
La procédure ou fonction 'toto' attend le paramètre '@Param2', qui n'a pas été fourni.
 
bug de management studio,  
de sql server express 2008 R2.


Message édité par Iaire le 20-01-2011 à 10:27:30
n°2050436
Oliiii
Posté le 20-01-2011 à 13:20:00  profilanswer
 

Essaye ca:

Code :
  1. Declare @Param2 int
  2. Exec toto @Param1 = 1, @Param2 OUTPUT
  3. SELECT @Param2

n°2050585
Iaire
Posté le 20-01-2011 à 22:44:28  profilanswer
 

Merci bcp, ca marche.
Remarque à caractere gle : je trouve dommage de redeclarer le Params2 a l'execution et de refaire un select pour le recuperer.  
OUTPUT pas si OUTPUT que ca en fait.

n°2050617
Oliiii
Posté le 21-01-2011 à 07:32:33  profilanswer
 

En fait dans Exec toto @Param1 = 1, @Param2 OUTPUT
Les 2 arguments ne sont pas les meme, @Param1 est facultatif, il indique juste que la procedure doit mettre 1 dans l'argument @Param1, @Param2 par contre est une variable qui est passée a la procedure, et doit donc etre déclarée, c'est juste un hazard qu'elle a le meme nom que l'argument de la procedure.
 
Tu aurais aussi bien pu ecrire:

Code :
  1. Declare @truc int
  2. Exec toto 1, @truc OUTPUT
  3. SELECT @truc


 
voir meme ca:

Code :
  1. Declare @Param2 int
  2. Exec @Param1 = 1, @Param2 = @Param2 OUTPUT
  3. SELECT @Param2


Mais la c'est plus tres clair :)


Message édité par Oliiii le 21-01-2011 à 07:33:08
n°2050968
Iaire
Posté le 22-01-2011 à 00:13:36  profilanswer
 

Yes, beaucoup plus clair.  
Enfin compris le pourquoi, recuperer @truc sert a recuperer la variable (OUTPUT) de la procedure stockée, à l'execution.  
Merci d'avoir pris le temps d'éclairer ma lanterne  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL SERVER 2008] : Parametre OUTPUT qui sort pas

 

Sujets relatifs
[erreur]DAO.Recordset et Req SQL[vbs] Help- Connexion à une base de donnée SQL
REGEXP en SQLRequête SQL selon conditions
VIsual Studio C# 2008 - option Type de la plateforme cibleSQL et Union
Deconcatener SQL sous ACCESSSQL: une somme toute bête
[SQL] - Restauration sans NDF ?Problème pour créer la requête SQL demandée
Plus de sujets relatifs à : [SQL SERVER 2008] : Parametre OUTPUT qui sort pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR