sp_recompile (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース

ストアド プロシージャ、トリガー、およびユーザー定義関数が次回実行時に再コンパイルされるようにします。 これは、プロシージャキャッシュから既存のプランを削除し、次にプロシージャまたはトリガーが実行された時点で新しいプランを作成する必要がある場合に行います。 SQL Server プロファイラー コレクションでは、SP:Recompile イベントではなく SP:CacheInsert イベントがログに記録されます。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

  
sp_recompile [ @objname = ] 'object'  

引数

[ @objname = ] 'オブジェクト'
現在のデータベースにあるストアド プロシージャ、トリガー、テーブル、ビュー、またはユーザー定義関数の修飾名または非修飾名を指定します。 オブジェクトnvarchar(776) で、既定値はありません。 object ストアド プロシージャ、トリガー、またはユーザー定義関数の名前である場合、次回の実行時にストアド プロシージャ、トリガー、または関数が再コンパイルされます。 オブジェクトが テーブルまたはビューの名前である場合、テーブルまたはビューを参照するストアド プロシージャ、トリガー、またはユーザー定義関数はすべて、次回の実行時に再コンパイルされます。

リターン コードの値

0 (成功) または 0 以外の数値 (失敗)

解説

sp_recompile は、現在のデータベース内でのみオブジェクトを検索します。

ストアド プロシージャ、トリガー、およびユーザー定義関数が使用するクエリは、コンパイル時にだけ最適化されます。 データベースにインデックスを追加したり、変更を加えたりすると、統計が変化するため、コンパイルされたストアド プロシージャ、トリガー、およびユーザー定義関数の効率が低下する場合があります。 そのテーブルに作用するストアド プロシージャやトリガーを再コンパイルすることにより、クエリを再び最適化できます。

注意

SQL Server を使用すると、ストアド プロシージャ、トリガー、およびユーザー定義関数が自動的に再コンパイルされます。

アクセス許可

指定したオブジェクトに対する ALTER 権限が必要です。

次の例では、Customer テーブルを対象とするストアド プロシージャ、トリガー、およびユーザー定義関数が次回実行時に再コンパイルされます。

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

参照

CREATE PROCEDURE (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)