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 RECOMPILEASSelect SampleName, SampleDesc From SampleTableGO
(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