sp_recompile (Transact-SQL)
在下次預存程序、觸發程序和使用者定義函數執行時,重新編譯它們。 其運作方式是從程序快取中卸除現有的計畫,以便強制在下次執行程序或觸發程序時建立新的計畫。 在 SQL Server Profiler 集合中,系統會記錄 SP:CacheInsert 事件而非 SP:Recompile 事件。
語法
sp_recompile [ @objname = ] 'object'
引數
- [ @objname= ] 'object'
目前資料庫中之預存程序、觸發程序、資料表、檢視表或使用者定義函數的限定或非限定名稱。 object 是 nvarchar(776),沒有預設值。 如果 object 是預存程序、觸發程序或使用者定義函數的名稱,下次預存程序、觸發程序或函數執行時,會重新編譯它們。 如果 object 是資料表或檢視表的名稱,下次參考這份資料表或檢視表的所有預存程序、觸發程序或使用者定義函數執行時,會重新編譯它們。
傳回碼值
0 (成功) 或非零數字 (失敗)
備註
sp_recompile 只會在目前資料庫中尋找物件。
預存程序、觸發程序和使用者定義函數所用的查詢,只在編譯時才會最佳化。 當資料庫進行會影響統計資料的索引或其他變更時,編譯過的預存程序、觸發程序和使用者定義函數可能會失效。 您可以重新編譯處理資料表的預存程序、觸發程序和使用者定義函數來重新最佳化查詢。
[!附註]
SQL Server 會在重新編譯有利時,自動重新編譯預存程序、觸發程序和使用者定義函數。
權限
需要指定物件的 ALTER 權限。
範例
下列範例會在下次處理 Customer 資料表的預存程序、觸發程序和使用者定義函數執行時,重新編譯它們。
USE AdventureWorks2012;
GO
EXEC sp_recompile N'Sales.Customer';
GO