Execute stored procedure with an Output parameter?

Sql ServerStored Procedures

Sql Server Problem Overview


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?

Sql Server Solutions


Solution 1 - Sql Server

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.

Solution 2 - Sql Server

you can do this :

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

Solution 3 - Sql Server

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 

Solution 4 - Sql Server

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

Solution 5 - Sql Server

#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

Solution 6 - Sql Server

From https://docs.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

Solution 7 - Sql Server

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 

Solution 8 - Sql Server

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
    

Solution 9 - Sql Server

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.

Solution 10 - Sql Server

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

Solution 11 - Sql Server

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

Solution 12 - Sql Server

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

Solution 13 - Sql Server

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'

Solution 14 - Sql Server

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())

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser70192View Question on Stackoverflow
Solution 1 - Sql ServerRayView Answer on Stackoverflow
Solution 2 - Sql ServerFarhad ShekariView Answer on Stackoverflow
Solution 3 - Sql Serverwasay razaView Answer on Stackoverflow
Solution 4 - Sql ServerSheikh M. HarisView Answer on Stackoverflow
Solution 5 - Sql ServerAbhishek JaiswalView Answer on Stackoverflow
Solution 6 - Sql ServerajdamsView Answer on Stackoverflow
Solution 7 - Sql ServerJaiderView Answer on Stackoverflow
Solution 8 - Sql Serveruser1388325View Answer on Stackoverflow
Solution 9 - Sql ServerDark MatterView Answer on Stackoverflow
Solution 10 - Sql ServerYashwant Software DeveloperView Answer on Stackoverflow
Solution 11 - Sql ServerDhrubajyoti DasView Answer on Stackoverflow
Solution 12 - Sql ServerDebendra DashView Answer on Stackoverflow
Solution 13 - Sql ServerRony PatelView Answer on Stackoverflow
Solution 14 - Sql ServerHasan ZafariView Answer on Stackoverflow