2014-09-02 75 views
1

如何手動重新編譯SQL Server中的存儲過程?就像dropcreate手動重新編譯存儲過程SQL Server

我知道可以在創建語句(WITH RECOMPILE)選項做它,它就會被重新編譯每次執行,並執行sp_recompile @procedureName,這隻會在執行下一次重新編譯它,但我怎麼可以手動重新編譯它沒有這些兩種方法?

+0

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

+0

DROP/CREATE也會在下次執行時編譯proc我認爲sp_recompile是你想要的。 – 2014-09-02 12:11:34

回答

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」的劇本。這包含許多有代表性的查詢和過程調用來導致編譯和緩存。我們在維護和索引重建之後使用它來測試/預備系統,然後再次向用戶發佈它。