Normally when a user calls a stored procedure, SQL Server does not
create a new data access plan to retrieve the information from the database.
The queries used by stored procedures are optimized only when they are
compiled. As you make changes to the table structure or introduce new
indexes which may optimize the data retrieval you should recompile your
stored procedures as already compiled stored procedures may lose efficiency.
By recompiling stored procedures you can optimize the queries. There are
three ways in which you can force SQL Server to recompile your stored
procedure:
(a) The sp_recompile system stored procedure forces a recompile of a stored procedure the next time it is executed. For example:
exec sp_recompile MyTable
(b) Create a stored procedure specifying WITH RECOMPILE option. If WITH
RECOMPILE is specified SQL Server does not cache a plan for this stored
procedure; the stored procedure is recompiled each time it is executed. Use
the WITH RECOMPILE option when stored procedures take parameters whose
values differ widely between executions of the stored procedure, resulting
in different execution plans to be created each time. Ideally, you should not
use this option because by using this option, you lose most of the advantages
you get by substituting SQL queries with the stored procedures. However, you
can use this option during early development stages of the project where
database structure is still evolving and stored procedures should be
recompiled as a result of these changes.
Here is how you can create a store procedure using RECOMPILE option:
CREATE PROCEDURE usp_MyProcedure WITH RECOMPILE
AS
Select SampleName, SampleDesc From SampleTable
GO
(c) You can force the stored procedure to be recompiled by specifying the
WITH RECOMPILE option when you execute the stored procedure. Use this option
only if the parameter you are supplying is atypical or if the data has
significantly changed since the stored procedure was created. For example:
EXEC usp_MyProcedure WITH RECOMPILE