Click here to monitor SSC
SQLServerCentral is supported by Red Gate Software Ltd.
 
Log in  ::  Register  ::  Not logged in
 
 
 

Using Parameters with Stored Procedures

By Kathi Kellenberger, (first published: 2005/08/08)

Introduction

The prefered way for applications to access SQL Server data is by the use of stored procedures. The benefits include increased performance, security, and code reuse. Often, beginning SQL Server developers find the use of parameters, especially output parameters, with stored procedures confusing. This article will demonstrate how to use parameters with stored procedures, including some sample code using VB.Net. The examples shown are based on SQL 2000, but the concepts apply to SQL 2005 as well.

Creating a stored procedure

From Books Online, here is the syntax used to create a stored procedure:

CREATE PROC [ EDURE ] [ owner. ] procedure_name [ ; number ]
    [ { @parameter data_type }
        [ VARYING ] [ = default ] [ OUTPUT ]
    ] [ ,...n ]

[ WITH
    { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

[ FOR REPLICATION ]

AS sql_statement [ ...n ]

You can also use the alter procedure statement to modify an existing stored procedure. A stored procedure can have up to 2,100 parameters. It is probably safe to assume that the typical stored procedure has no more than ten.

Here is a very simple create procedure statement that takes two input parameters and one output parameter. Normally, a stored procedure will perform some kind of data manipulation or retrieval, so this is not the average example. It will, however, serve as a simple way to illustrate the use of parameters.

CREATE PROC usp_AddTwoIntegers @FirstNumber int = 5,
   @SecondNumber int, @Answer varchar(30) OUTPUT as

   Declare @sum int
   Set @sum = @FirstNumber + @SecondNumber
   Set @Answer = 'The answer is ' + convert(varchar,@sum)
   Return @sum

How to define a paramter

The first thing to remember is that the parameter name must start with an @ symbol. The name can’t have spaces, and there are some characters that are not allowed. If you just stick with alpha-numeric characters and underscores in your parameter names you won’t have any problems naming parameters.

Second, the data type of the parameter and possibly the size must be stated. For example, the size of a parameter of type VARCHAR must be specified. Third, if you wish to access a return value from the parameter, the OUTPUT keyword must be used. In the example create proc statement, three parameters are defined, two are integers. One of the parameters, @Answer, is an OUTPUT parameter and will be used to pass a value back to the caller.

Parameters can be given a default value. The @FirstNumber parameter has a default value of 5.

How to Call a Stored Procedure from Query Analyzer

A stored procedure can be called from query analyzer, another stored procedure or any other client that can talk to SQL Server. Here is a sample script that can be pasted into Query Analyzer to demonstrate the use of our proc:

Declare @a int, @b int, @c varchar(30)
Select @a = 1, @b = 2
Exec usp_AddTwoIntegers @a, @b, @c OUTPUT
Select @c


---------------
The answer is 3

Notice that the keyword OUTPUT is used in the calling statement as well as the proc's definition. All of the arguments were defined as variables but given names that don’t match the original parameter names. This works because SQL resolves the parameters based on the position.

Only the output parameter must be defined up front. The next example passes literal values for the first two arguments.

Declare @Answer varchar(30)
Exec usp_AddTwoIntegers 1,2,@Answer OUTPUT
Select @Answer


---------------
The answer is 3

It is also possible to mix up the order of the arguments if the parameters are named in the calling statement.

The @FirstNumber parameter has a default that the proc will use since the argument is not specified.

Declare @Answer varchar(30)
Exec usp_AddTwoIntegers @Answer = @Answer OUTPUT, @SecondNumber = 5
Select @Answer


----------------
The answer is 10

Hopefully many of you have noticed that the actual numeric sum is also returned from the procedure. This example shows how to access the return value.

Declare @sum int, @Answer varchar(30)
Exec @sum = usp_AddTwoIntegers 5,5,@Answer
Select @sum


-----------
10

Normally return values are used to report the success or failure of the procedure. So, even though you can return any integer value from the proc, usually a 0 for success or 1 for failure is returned.

Stored procedures are usually used to retrieve or manipulate data. Here is a typical stored procedure using the Northwind sample database that ships with SQL 2000. The parameter is used in the where clause to filter the results.

Create proc usp_GetCustomerName @CustomerID varchar(5) as
      Select CompanyName from Customers where CustomerID = @CustomerID

go

exec usp_GetCustomerName 'ANTON'

CompanyName
-----------------------
Antonio Moreno Taquería

Calling a stored procedure from VB.Net

As promised, here is a code snippet showing how to call a stored procedure using VB.Net. Again, no one would ever call a stored procedure to add two numbers together. This example is given to illustrate the use of parameters.

Create a new VB.Net Windows Application project. Add a button to the form. Add this statement to top of the form’s code window:

	Imports System.Data.SqlClient

Paste this code into the form’s code window right above the End Class statement. I added the sample stored procedure to the Northwind database. Modify the connection string so it will work in your environment.

Private Sub Button1_Click(ByVal sender As System.Object, _
			ByVal e As System.EventArgs) Handles Button1.Click

        'You may need to modify the connection string
        Dim conn As New SqlConnection("Integrated Security=SSPI;" _
			& "Persist Security Info=False;Initial Catalog=Northwind;" _
			& "Data Source=(local);Packet Size=4096;")
        conn.Open()

        'set up the command object
        Dim myCommand As New SqlCommand("usp_AddTwoIntegers", conn)
        myCommand.CommandType = CommandType.StoredProcedure

        'add the first two parameters
        myCommand.Parameters.Add("@FirstNumber", 5) 'this one is optional
        myCommand.Parameters.Add("@SecondNumber", 5)

        'The output and return parameters must be created as objects
        Dim myAnswer As New SqlParameter("@Answer", SqlDbType.VarChar, 30)
        myAnswer.Direction = ParameterDirection.Output

        Dim mySum As New SqlParameter()
        mySum.Direction = ParameterDirection.ReturnValue

        'add them to the parameter collection
        myCommand.Parameters.Add(myAnswer)
        myCommand.Parameters.Add(mySum)

        'execute the query
        myCommand.ExecuteNonQuery()

        'display the values
        MsgBox(myAnswer.Value)
        MsgBox(mySum.Value)
    End Sub

Run the form and click the button to see the output parameter and return values.

Conclusion

Using stored procedures is the best way for applications to access SQL data. This article explained, using a very simple example, how to use parameters with stored procedures.

Total article views: 118184 | Views in the last 30 days: 73
 
Related Articles
FORUM

Stored procedures with output parameters

Stored procedures with output parameters

FORUM

Stored procedures with output parameters

Stored procedures with output parameters

FORUM

maximum number of output parameters we can use in Stored procedure

maximum number of output parameters we can use in Stored procedure

FORUM

stored procedure parameters question

stored procedure parameters question

FORUM

Return output parameter

output parameters

Tags
__briefcase    
 
Contribute

Join the most active online SQL Server Community

SQL knowledge, delivered daily, free:

Email address:  

You make SSC a better place

As a member of SQLServerCentral, you get free access to loads of fresh content: thousands of articles and SQL scripts, a library of free eBooks, a weekly database news roundup, a great Q & A platform… And it’s our huge, buzzing community of SQL Server Professionals that makes it such a success.

Join us!

Steve Jones
Editor, SQLServerCentral.com

Already a member? Jump in:

Email address:   Password:   Remember me: Forgotten your password?
Steve Jones