248

I have a stored procedure that I am trying to test. I am trying to test it through SQL Management Studio. In order to run this test I enter ...

exec my_stored_procedure 'param1Value', 'param2Value'

The final parameter is an output parameter. However, I do not know how to test a stored procedure with output parameters.

How do I run a stored procedure with an output parameter?

Drew
  • 29,895
  • 7
  • 74
  • 104
user70192
  • 13,786
  • 51
  • 160
  • 240

14 Answers14

248

The easy way is to right-click on the procedure in Sql Server Management Studio (SSMS), select 'Execute stored procedure..." and add values for the input parameters as prompted. SSMS will then generate the code to run the procedure in a new query window, and execute it for you. You can study the generated code to see how it is done.

TylerH
  • 20,799
  • 66
  • 75
  • 101
Ray
  • 21,485
  • 5
  • 48
  • 64
  • 2
    I know all other possible ways to execute stored procedure(like EXEC , calling from C# or PHP) but this is the easiest and a non technical person can do this. so +1 for this and thx for sharing the information. – Dhaval Sep 03 '13 at 11:13
  • I don't have an `execute` command, the context menu has just a `modify`. – Akbari Jun 08 '15 at 05:25
  • That seems odd. My context menu on a stored procedure has about a dozen items, including modify, execute, properties, and others – Ray Jun 08 '15 at 14:56
  • 3
    I think the answer by Jaider below completes this answer since I myself would be interested in the written command and not the mouse solution. – Alwyn Schoeman Dec 06 '17 at 02:30
  • Another slightly different way using SSMS: right-click the SP, click "Script Stored Procedure as", then click "EXECUTE To". This will show you the TSQL. – John Gilmer Dec 17 '19 at 06:15
207

you can do this :

declare @rowCount int
exec yourStoredProcedureName @outputparameterspOf = @rowCount output
Farhad Shekari
  • 2,245
  • 1
  • 14
  • 12
102

Return val from procedure

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 
Martin Smith
  • 438,706
  • 87
  • 741
  • 845
wasay raza
  • 1,021
  • 1
  • 7
  • 2
54

Check this, where the first two parameters are input parameters and the 3rd is an Output parameter in the Procedure definition.

DECLARE @PK_Code INT;
EXEC USP_Validate_Login 'ID', 'PWD', @PK_Code OUTPUT
SELECT @PK_Code
pjpscriv
  • 866
  • 11
  • 20
Sheikh M. Haris
  • 892
  • 1
  • 9
  • 17
35

From https://learn.microsoft.com/en-US/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql (originally http://support.microsoft.com/kb/262499)

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
TylerH
  • 20,799
  • 66
  • 75
  • 101
ajdams
  • 2,276
  • 14
  • 20
35

Procedure Example :

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

How to call this procedure

Declare @ID int    
EXECUTE [dbo].[test] 'Abhishek',@ID OUTPUT   
PRINT @ID
alroc
  • 27,574
  • 6
  • 51
  • 97
Abhishek Jaiswal
  • 1,161
  • 12
  • 6
26

First, declare the output variable:

DECLARE @MyOutputParameter INT;

Then, execute the stored procedure, and you can do it without parameter's names, like this:

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT

or with parameter's names:

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

And finally, you can see the output result by doing a SELECT:

SELECT @MyOutputParameter 
Jaider
  • 14,268
  • 5
  • 75
  • 82
11

With this query you can execute any stored procedure (with or without an output parameter):

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

Here the datatype of @temp should be the same as @parameter3 within your Stored Procedure.

TylerH
  • 20,799
  • 66
  • 75
  • 101
Indranil
  • 2,229
  • 2
  • 27
  • 40
10

How about this? It's extremely simplified:

  1. The SPROC below has an output parameter of @ParentProductID

  2. We want to select the value of the output of @ParentProductID into @MyParentProductID which is declared below.

  3. Here's the Code:

    declare @MyParentProductID int
    
    exec p_CheckSplitProduct @ProductId = 4077, @ParentProductID =  @MyParentProductID output
    
    select @MyParentProductID
    
grim
  • 6,669
  • 11
  • 38
  • 57
user1388325
  • 101
  • 1
  • 3
9

Try this; it's working fine for the multiple output parameter:

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
TylerH
  • 20,799
  • 66
  • 75
  • 101
4
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
Shakeer Mirza
  • 5,054
  • 2
  • 18
  • 41
2

Here is the stored procedure

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

And here is the way to execute the procedure

 declare @name1 nvarchar(10)
    exec sp1 1,@name1 out
    print @name1
Debendra Dash
  • 5,334
  • 46
  • 38
2

Please check below example to get output variable value by executing a stored procedure.

    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
  • 357
  • 1
  • 2
  • 14
0

Here is the definition of the stored_proc:

create proc product(@a int,@b int)
as
return @a * @b

And, this is executing it from Python: conn = pyodbc.connect('...') cursor = conn.cursor()

sql = """
SET NOCOUNT ON
declare @r float
exec @r=dbo.product 5,4
select @r
"""
result = cursor.execute(sql)
print (result.fetchall())
Hasan Zafari
  • 355
  • 2
  • 6