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

197

J'ai une procédure stockée que j'essaie de tester. J'essaie de le tester via SQL Management Studio. Pour 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?

user70192
la source

Réponses:

225

Le moyen le plus simple est de right-clicksur le proceduredans SQL Server Management Studio (SSMS),

sélectionner execute stored procedure...

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

SSMSgé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.

Rayon
la source
2
Je connais toutes les autres manières possibles d'exécuter une procédure stockée (comme EXEC, appeler depuis C # ou PHP) mais c'est la plus simple et une personne non technique peut le faire. donc +1 pour cela et thx pour partager les informations.
Dhaval le
Je n'ai pas de executecommande, le menu contextuel a juste un modify.
Akbari
Cela semble étrange. Mon menu contextuel sur une procédure stockée contient environ une douzaine d'éléments, y compris modifier, exécuter, propriétés et autres
Ray
2
Je pense que la réponse de Jaider ci-dessous complète cette réponse car je serais moi-même intéressé par la commande écrite et non par la solution de la souris.
Alwyn Schoeman
Une autre manière légèrement différente d'utiliser SSMS: faites un clic droit sur le SP, cliquez sur "Script Stored Procedure as", puis cliquez sur "EXECUTE To". Cela vous montrera le TSQL.
John Gilmer
167

tu peux le faire :

declare @rowCount int
exec yourStoredProcedureName @outputparameterspOf = @rowCount output
farhad
la source
7
Je ne disais pas 'OUTPUT' à la fin. Toujours quelque chose de stupide, merci!
Milne
J'aime éviter autant que possible d'ouvrir les dialogues dans SSMS, donc c'était parfait.
ahwm
89

Retourner 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 
wasay raza
la source
43

Vérifiez ceci, 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 la procédure.

DECLARE @PK_Code INT;
EXEC USP_Validate_Login  'ID', 'PWD', @PK_Code OUTPUT
SELECT @PK_Code
Cheikh M. Haris
la source
30

Depuis 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!

ajdams
la source
26

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
Abhishek Jaiswal
la source
18

Tout d'abord, déclarez la variable de sortie:

DECLARE @MyOutputParameter INT;

Ensuite, exécutez la procédure stockée et vous pouvez le faire sans le nom des paramètres, comme ceci:

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT

ou avec les noms des paramètres:

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

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

SELECT @MyOutputParameter 
Jaider
la source
4
cela aurait dû être la réponse choisie
anaval
9

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 @ParentProductIDdans @MyParentProductIDlaquelle est déclaré ci-dessous.

  3. Voici le code:

    declare @MyParentProductID int
    
    exec p_CheckSplitProduct @ProductId = 4077, @ParentProductID =  @MyParentProductID output
    
    select @MyParentProductID
user1388325
la source
7

> Essayez ceci, cela fonctionne bien 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
Développeur logiciel Yashwant
la source
3
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
Dhrubajyoti Das
la source
3

Avec cette requête, vous pouvez exécuter n'importe quelle procédure stockée (avec ou sans paramètre de sortie):

DECLARE @temp varchar(100)  
EXEC my_sp
    @parameter1 = 1, 
    @parameter2 = 2, 
    @parameter3 = @temp output, 
    @parameter4 = 3, 
    @parameter5 = 4
PRINT @temp

Ici, le type de données de @temp doit être identique à @ parameter3 dans SP.

J'espère que cela t'aides..

Matière noire
la source
Cela m'a été utile. Je vous remercie. Je n'ai pas pensé à déclarer la variable en premier. Juste besoin de voir un exemple de syntaxe. C'était ça.
Steven Johnson
1

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 la façon d'exécuter la procédure

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

Veuillez consulter l'exemple ci-dessous 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'
Rony Patel
la source
-1

J'utilise le paramètre de sortie dans SQL Proc et plus tard, j'ai utilisé ces valeurs dans l'ensemble de résultats.

entrez la description de l'image ici

Ajeet Verma
la source