2014-09-02 5 views
1

Как я могу перекомпилировать вручную хранимую процедуру в SQL Server? Это как drop и create?Ручная перекомпиляция хранимой процедуры SQL Server

Я знаю, что могу сделать это с опцией в операторе создания (WITH RECOMPILE), и она будет перекомпилировать все исполнения, и исполнение sp_recompile @procedureName, который будет только перекомпилировать его в следующий раз, когда он выполняет, но как я могу пересобрать его вручную без них два подхода?

+0

[ALTER PROCEDURE] (http://technet.microsoft.com/en-us/library/aa225939 (v = sql.80) .aspx) – bummi

+0

DROP/CREATE также компилирует proc при следующем его выполнении Я думаю, что sp_recompile - это то, что вы хотите. –

ответ

0

Ну, один из способов сделать это, чтобы найти план ручки, запрашивая

Select st.Plan_handle 
from 
sys.dm_exec_cached_plans 
    CROSS APPLY 
sys.dm_exec_sql_text(plan_handle) st 
WHERE text like '% your proc name %' 

Тогда DBCC FREEPROCCACHE (plan_handle)

Этот метод эффективно так же, как sp_recompile.

3

Хранимые процедуры скомпилированы, когда они выполняются «первым». «Первое» означает, что у них нет чёткого плана. Все, что вы можете сделать - это недействительность кеша. В SQL-Server нет возможности принудительно компилировать, кроме вызова.

(кстати, это в отличие от Oracle, где вы, возможно, получили идею от)

В нашем приложении мы поддерживаем сценарий под названием «run_sample_statements.sql». Это содержит ряд репрезентативных запросов и процедур, вызывающих компиляцию и кеширование. Мы использовали это после обслуживания и восстановления индексов для тестирования/предварительной проверки системы до того, как мы снова выпустим ее для пользователей.

Смежные вопросы