如何手動重新編譯SQL Server中的存儲過程?就像drop
和create
?手動重新編譯存儲過程SQL Server
我知道可以在創建語句(WITH RECOMPILE)
選項做它,它就會被重新編譯每次執行,並執行sp_recompile @procedureName
,這隻會在執行下一次重新編譯它,但我怎麼可以手動重新編譯它沒有這些兩種方法?
如何手動重新編譯SQL Server中的存儲過程?就像drop
和create
?手動重新編譯存儲過程SQL Server
我知道可以在創建語句(WITH RECOMPILE)
選項做它,它就會被重新編譯每次執行,並執行sp_recompile @procedureName
,這隻會在執行下一次重新編譯它,但我怎麼可以手動重新編譯它沒有這些兩種方法?
好了,這樣做的一種方式是通過查詢
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。
存儲過程在「第一次」執行時被編譯。 「第一」的含義是,他們沒有計劃。你所能做的只是使緩存無效。在SQL-Server中,除了調用它之外,沒有辦法強制編譯。
(順便說一句,這是與Oracle不同,在這裏你可能得到從想法)
在我們的應用中,我們保持了一個名爲「run_sample_statements.sql」的劇本。這包含許多有代表性的查詢和過程調用來導致編譯和緩存。我們在維護和索引重建之後使用它來測試/預備系統,然後再次向用戶發佈它。
[ALTER PROCEDURE](http://technet.microsoft.com/en-us/library/aa225939(v = sql.80).aspx) – bummi 2014-09-02 11:58:35
DROP/CREATE也會在下次執行時編譯proc我認爲sp_recompile是你想要的。 – 2014-09-02 12:11:34