下記のプロシージャではリコンパイルするようにマークすることができます。
最新の統計情報をもとに実行するように促すため、あるプロシージャ1回の動きだけをみると、リコンパイルするために速度が低下します。
declare @spname nvarchar(776)
declare cur_spnames cursor for
SELECT
sp.name AS [Name]
FROM
sys.all_objects AS sp
LEFT OUTER JOIN sys.sql_modules AS smsp ON smsp.object_id = sp.object_id
LEFT OUTER JOIN sys.system_sql_modules AS ssmsp ON ssmsp.object_id = sp.object_id
WHERE
(sp.type = N'P' OR sp.type = N'RF' OR sp.type='PC')and(CAST(
case
when sp.is_ms_shipped = 1 then 1
when (
select
major_id
from
sys.extended_properties
where
major_id = sp.object_id and
minor_id = 0 and
class = 1 and
name = N'microsoft_database_tools_support')
is not null then 1
else 0
end
AS bit)=0)
OPEN cur_spnames
FETCH NEXT FROM cur_spnames
into @spname
while @@FETCH_STATUS = 0
BEGIN
exec sp_recompile @spname
FETCH NEXT FROM cur_spnames
into @spname
END
close cur_spnames
DEALLOCATE cur_spnames