web-dev-qa-db-fra.com

Exécuter une procédure stockée avec un paramètre de sortie?

J'ai une procédure stockée que j'essaye de tester. J'essaie de le tester via SQL Management Studio. Afin d'exécuter ce test j'entre ...

exec my_stored_procedure 'param1Value', 'param2Value'

Le dernier paramètre est un output parameter. Cependant, je ne sais pas comment tester une procédure stockée avec des paramètres de sortie.

Comment exécuter une procédure stockée avec un paramètre de sortie?

176
user70192

Le moyen le plus simple est de right-click sur le procedure in Sql Server Management Studio (SSMS),

sélectionnez _execute stored procedure..._

et ajoutez des valeurs pour les paramètres entrée à l'invite.

SSMS générera ensuite le code pour exécuter le proc dans une nouvelle fenêtre de requête et l'exécutera pour vous. Vous pouvez étudier le code généré pour voir comment cela se fait.

212
Ray

tu peux le faire :

declare @rowCount int
exec yourStoredProcedureName @outputparameterspOf = @rowCount output
154

Renvoie la valeur de la procédure

ALTER PROCEDURE testme @input  VARCHAR(10),
                       @output VARCHAR(20) output
AS
  BEGIN
      IF @input >= '1'
        BEGIN
            SET @output = 'i am back';

            RETURN;
        END
  END

DECLARE @get VARCHAR(20);

EXEC testme
  '1',
  @get output

SELECT @get 
83
wasay raza

Cochez cette case, où les deux premiers paramètres sont des paramètres d'entrée et le troisième est le paramètre de sortie dans la définition de procédure.

DECLARE @PK_Code INT;
EXEC USP_Validate_Login  'ID', 'PWD', @PK_Code OUTPUT
SELECT @PK_Code
37
Sheikh M. Haris

De http://support.Microsoft.com/kb/262499

Exemple:

CREATE PROCEDURE Myproc

@parm varchar(10),
**@parm1OUT varchar(30) OUTPUT**,
**@parm2OUT varchar(30) OUTPUT**
AS
  SELECT @parm1OUT='parm 1' + @parm
 SELECT @parm2OUT='parm 2' + @parm

GO

DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @parmIN VARCHAR(10)
DECLARE @parmRET1 VARCHAR(30)
DECLARE @parmRET2 VARCHAR(30)

SET @parmIN=' returned'
SET @SQLString=N'EXEC Myproc @parm,
                         @parm1OUT OUTPUT, @parm2OUT OUTPUT'
SET @ParmDefinition=N'@parm varchar(10),
                  @parm1OUT varchar(30) OUTPUT,
                  @parm2OUT varchar(30) OUTPUT'

EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@parm=@parmIN,
@parm1OUT=@parmRET1 OUTPUT,@parm2OUT=@parmRET2 OUTPUT

SELECT @parmRET1 AS "parameter 1", @parmRET2 AS "parameter 2"
GO
DROP PROCEDURE Myproc

J'espère que cela t'aides!

29
ajdams

Exemple de procédure:

Create Procedure [dbo].[test]
@Name varchar(100),
@ID int Output   
As  
Begin   
SELECT @ID = UserID from tbl_UserMaster where  Name = @Name   
Return;
END     

Comment appeler cette procédure

Declare @ID int    
EXECUTE [dbo].[test] 'Abhishek',@ID OUTPUT   
PRINT @ID
23
Abhishek Jaiswal

Commencez par déclarer la variable de sortie:

DECLARE @MyOutputParameter INT;

Ensuite, exécutez la procédure stockée, et vous pouvez le faire sans les noms de paramètre, comme ceci:

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT

ou avec les noms de paramètre:

EXEC my_stored_procedure @param1 = 'param1Value', @myoutput = @MyOutputParameter OUTPUT

Et enfin, vous pouvez voir le résultat en faisant un SELECT:

SELECT @MyOutputParameter 
15
Jaider

Que dis-tu de ça? C'est extrêmement simplifié:

  1. Le SPROC ci-dessous a un paramètre de sortie de @ParentProductID

  2. Nous voulons sélectionner la valeur de la sortie de @ParentProductID dans @MyParentProductID qui est déclaré ci-dessous.

  3. Voici le code:

    declare @MyParentProductID int
    
    exec p_CheckSplitProduct @ProductId = 4077, @ParentProductID =  @MyParentProductID output
    
    select @MyParentProductID
    
9
user1388325

> Essayez ceci pour le paramètre de sortie multiple:

CREATE PROCEDURE [endicia].[credentialLookup]
@accountNumber varchar(20),
@login varchar(20) output,
@password varchar(50) output
AS
BEGIN
SET NOCOUNT ON;
SELECT top 1 @login = [carrierLogin],@password = [carrierPassword]
  FROM [carrier_account] where carrierLogin = @accountNumber
  order by clientId, id
END

Try for the result: 
SELECT *FROM [carrier_account] 
DECLARE @login varchar(20),@password varchar(50)
exec [endicia].[credentialLookup] '588251',@login OUTPUT,@password OUTPUT
SELECT 'login'=@login,'password'=@password
CREATE PROCEDURE DBO.MY_STORED_PROCEDURE
(@PARAM1VALUE INT,
@PARAM2VALUE INT,
@OUTPARAM VARCHAR(20) OUT)
AS 
BEGIN
SELECT * FROM DBO.PARAMTABLENAME WHERE PARAM1VALUE=@PARAM1VALUE
END

DECLARE @OUTPARAM2 VARCHAR(20)
EXEC DBO.MY_STORED_PROCEDURE 1,@OUTPARAM2 OUT
PRINT @OUTPARAM2
3
Dhrubajyoti Das

Veuillez vérifier ci-dessous l'exemple pour obtenir la valeur de la variable de sortie en exécutant une procédure stockée.

    DECLARE @return_value int,
    @Ouput1 int,
    @Ouput2 int,
    @Ouput3 int

EXEC    @return_value = 'Your Sp Name'
        @Param1 = value1,
        @Ouput1 = @Ouput1 OUTPUT,
        @Ouput2 = @Ouput2 OUTPUT,
        @Ouput3 = @Ouput3 OUTPUT

SELECT  @Ouput1 as N'@Ouput1',
        @Ouput2 as N'@Ouput2',
        @Ouput3 as N'@Ouput3'
1
Rony Patel

Voici la procédure stockée

create procedure sp1
(
@id as int,
@name as nvarchar(20) out
)
as
begin
select @name=name from employee where id=@id
end

Et voici comment exécuter la procédure

 declare @name1 nvarchar(10)
    exec sp1 1,@name1 out
    print @name1
0
Debendra Dash