[SQL SERVER 2008] : Parametre OUTPUT qui sort pas

: Parametre OUTPUT qui sort pas [SQL SERVER 2008] - SQL/NoSQL - Programmation

Marsh Posté le 20-01-2011 à 01:41:26    

[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

Reply

Marsh Posté le 20-01-2011 à 01:41:26   

Reply

Marsh Posté le 20-01-2011 à 08:34:13    

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.

Reply

Marsh Posté le 20-01-2011 à 09:25:59    

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
Reply

Marsh Posté le 20-01-2011 à 13:20:00    

Essaye ca:

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

Reply

Marsh Posté le 20-01-2011 à 22:44:28    

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.

Reply

Marsh Posté le 21-01-2011 à 07:32:33    

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
Reply

Marsh Posté le 22-01-2011 à 00:13:36    

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  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed