Stored Procedures and Return Statement

In a recent interview i was been asked whether stored procedures can have “return” keyword and what type of values it can return.

I thought i will note this point here.

Stored Procedures can return value. Only a single numeric value can be returned.
Consider the following snippet.


CREATE PROCEDURE dbo.GetCustomerMaxID ()
AS

DECLARE @MAXID INT

SELECT MAX(ID) FROM CUSTOMER

Return  @MAXID

and we can call the proceduce like this


DECLARE @ReturnValue INT
EXEC @ReturnValue = GetCustomerMaxID
SELECT ReturnValue=@ReturnValue

and the output looks like this:

ReturnValue
----------- 
33343

(1 row(s) affected)

All it does is use the RETURN statement to send back the value that was passed in.

Note The executing a RETURN statement causes a stored procedure to stop executing and return control back to the calling program.

This is often used to test for error conditions and stop processing if one is found.

and we can get the value back in to our C# – ADO.NET code like below


public int GetCustomerMaxID()
{

string connectionString = 
  @"Server=.SQLEXPRESS; Initial Catalog=Northwind; Integrated Security=True;";
using (SqlConnection conn = new SqlConnection(connectionString))
{
    using (SqlCommand cmd = new SqlCommand("dbo.GetCustomerMaxID"))
    {
        cmd.CommandType = CommandType.StoredProcedure;
      
        SqlParameter returnValue = new SqlParameter("@Return_Value", DbType.Int32);
        returnValue.Direction = ParameterDirection.ReturnValue;

        cmd.Parameters.Add(returnValue);

        conn.Open();
        cmd.Connection = conn;

        cmd.ExecuteNonQuery();

        int maxID = Int32.Parse(cmd.Parameters["@Return_Value"].Value.ToString());
       
        conn.Close();

        return maxID;
    }
 }

 return 0;
}

Have fun!! Happy Coding..