Share via


sp_recompile (Transact-SQL)

在下次執行預存程序和觸發程序時,重新編譯它們。其運作方式是從程序快取中卸除現有的計畫,以便強制在下次執行程序或觸發程序時建立新的計畫。在 SQL Server Profiler 集合中,系統會記錄 SP:CacheInsert 事件而非 SP:Recompile 事件。

主題連結圖示Transact-SQL 語法慣例

語法

        sp_recompile [ @objname= ] 'object'

引數

  • [ @objname= ] 'object'
    目前資料庫中之預存程序、觸發程序、資料表或檢視的限定或非限定名稱。object 是 nvarchar(776),沒有預設值。如果 object 是預存程序或觸發程序的名稱,下次執行預存程序或觸發程序時,會重新編譯它們。如果 object 是資料表或檢視的名稱,下次執行參考這份資料表或檢視的所有預存程序或觸發程序時,會重新編譯它們。

傳回碼值

0 (成功) 或非零數字 (失敗)

備註

sp_recompile 只會在目前資料庫中尋找物件。

預存程序和觸發程序所用的查詢,只在編譯時才會最佳化。當資料庫進行會影響統計資料的索引或其他變更時,編譯過的預存程序和觸發程序可能會失效。您可以重新編譯處理資料表的預存程序和觸發程序來重新最佳化查詢。

[!附註]

當重新編譯預存程序和觸發程序有利時,SQL Server 會自動執行這個動作。

權限

需要指定之物件的 ALTER 權限。

範例

下列範例會在下次執行處理 Customer 資料表的預存程序和觸發程序時,重新編譯它們。

USE AdventureWorks2008R2;
GO
EXEC sp_recompile N'Sales.Customer';
GO