Stored procedures- an important aspect for the developers in SQL
A stored procedure is nothing more than prepared SQL code that you save so you can reuse the code over and over again. So if you think about a query that you write over and over again, instead of having to write that query each time you would save it as a stored procedure and then just call the stored procedure to execute the SQL code that you saved as part of the stored procedure.
In addition to running the same SQL code over and over again you also have the ability to pass parameters to the stored procedure, so depending on what the need is the stored procedure can act accordingly based on the parameter values that were passed.
There are various options to create a strored procedure.
First we will learn to create to a simple stored procedure
Before you create a stored procedure you need to know what your end result is, whether you are selecting data, inserting data, etc..
In this simple example we will just select all data from the Person.Address table that is stored in the AdventureWorks database.
So the simple T-SQL code would be as follows which will return all rows from this table.
SELECT * FROM AdventureWorks.Person.Address
|
To create a stored procedure to do this the code would look like this:
CREATE PROCEDURE uspGetAddress
AS
SELECT * FROM AdventureWorks.Person.Address
GO |
To call the procedure to return the contents from the table specified, the code would be:
EXEC uspGetAddress
--or just simply
uspGetAddress
|
How to create a SQL Server stored procedure with parameters |
OverviewThe real power of stored procedures is the ability to pass parameters and have the stored procedure handle the differing requests that are made. In this topic we will look at passing parameter values to a stored procedure.
ExplanationJust like you have the ability to use parameters with your SQL code you can also setup your stored procedures to except one or more parameter values.
One Parameter
In this example we will query the Person.Address table from the AdventureWorks database, but instead of getting back all records we will limit it to just a particular city. This example assumes there will be an exact match on the City value that is passed.
CREATE PROCEDURE uspGetAddress @City nvarchar(30) AS SELECT * FROM AdventureWorks.Person.Address WHERE City = @City GO |
To call this stored procedure we would execute it as follows:
EXEC uspGetAddress @City = 'New York' |
We can also do the same thing, but allow the users to give us a starting point to search the data. Here we can change the "=" to a LIKE and use the "%" wildcard.
CREATE PROCEDURE uspGetAddress @City nvarchar(30) AS SELECT * FROM AdventureWorks.Person.Address WHERE City LIKE @City + '%' GO |
In both of the proceeding examples it assumes that a parameter value will always be passed. If you try to execute the procedure without passing a parameter value you will get an error message such as the following:
|
Default Parameter Values
In most cases it is always a good practice to pass in all parameter values, but sometimes it is not possible. So in this example we use the NULL option to allow you to not pass in a parameter value. If we create and run this stored procedure as is it will not return any data, because it is looking for any City values that equal NULL.
CREATE PROCEDURE uspGetAddress @City nvarchar(30) = NULL AS SELECT * FROM AdventureWorks.Person.Address WHERE City = @City GO |
We could change this stored procedure and use the ISNULL function to get around this. So if a value is passed it will use the value to narrow the result set and if a value is not passed it will return all records.
CREATE PROCEDURE uspGetAddress @City nvarchar(30) = NULL AS SELECT * FROM AdventureWorks.Person.Address WHERE City = ISNULL(@City,City) GO |
Multiple Parameters
Setting up multiple parameters is very easy to do. You just need to list each parameter and the data type separated by a comma as shown below.
CREATE PROCEDURE uspGetAddress @City nvarchar(30) = NULL, @AddressLine1 nvarchar(60) = NULL AS SELECT * FROM AdventureWorks.Person.Address WHERE City = ISNULL(@City,City) AND AddressLine1 LIKE '%' + ISNULL(@AddressLine1 ,AddressLine1) + '%' GO |
To execute this you could do any of the following:
EXEC uspGetAddress @City = 'Calgary' --or EXEC uspGetAddress @City = 'Calgary', @AddressLine1 = 'A' --or EXEC uspGetAddress @AddressLine1 = 'Acardia' -- etc... |
Returning stored procedure parameter values to a calling stored procedure (OUTPUT) |
Overview
In a previous topic we discussed how to pass parameters into a stored procedure, but another option is to pass parameter values back out from a stored procedure. One option for this may be that you call another stored procedure that does not return any data, but returns parameter values to be used by the calling stored procedure.
Explanation
Setting up output paramters for a stored procedure is basically the same as setting up input parameters, the only difference is that you use the OUTPUT clause after the parameter name to specify that it should return a value. The output clause can be specified by either using the keyword "OUTPUT" or just "OUT".
Simple Output
CREATE PROCEDURE uspGetAddressCount @City nvarchar(30), @AddressCount int OUTPUT AS SELECT @AddressCount = count(*) FROM AdventureWorks.Person.Address WHERE City = @City |
Or it can be done this way:
CREATE PROCEDURE uspGetAddressCount @City nvarchar(30), @AddressCount int OUT AS SELECT @AddressCount = count(*) FROM AdventureWorks.Person.Address WHERE City = @City |
To call this stored procedure we would execute it as follows. First we are going to declare a variable, execute the stored procedure and then select the returned valued.
DECLARE @AddressCount int EXEC uspGetAddressCount @City = 'Calgary', @AddressCount = @AddressCount OUTPUT SELECT @AddressCount |
This can also be done as follows, where the stored procedure parameter names are not passed.
DECLARE @AddressCount int EXEC uspGetAddressCount 'Calgary', @AddressCount OUTPUT SELECT @AddressCount |
But as now you mastered the stored procedures
we will see how best can be a stored procedure used...The best way of writing a stored procedure is described below.
USE [DATABASE NAME] set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO IF EXISTS ( SELECT name FROM SYSOBJECTS WHERE type = 'P' AND name = 'storedprocedurename') DROP PROCEDURE dbo.[storedprocedurename] GO CREATE PROCEDURE [dbo].[storedprocedurename] -- Adding parameters for the stored procedure @parameter1 nvarchar(50) AS /****************************************************************************** ** File: storedprocedurename.sql ** Name: storedprocedurename ** Desc: SP to get a new record in storedprocedurename ** If a record alredy exists for the given parameter then return the existing record. ** NOTE: ** ** ** ** Return values: ** ** Called by: ** ** Parameters: ** Input Description ** ---------- ----------- ** @parameter1 parameter description ** ** ** Author: Sandeep kumar ** Date: 31-01-2011 ******************************************************************************* ** Change History ******************************************************************************* ** Date: Author: Description: ** -------- -------- ----------------------------- ** ** *******************************************************************************/ BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; SELECT columnname1, columnname2, columnname3 FROM tablename WHERE columnname = @parameter1 END |
By now you should have mastered the usage of stored procedure.
CHEERS...
THESANDEEP
WWW.THESANDEEP.COM
