sp_recompile (Transact-SQL)

適用対象:yesSQL Server (サポートされているすべてのバージョン) YesAzure SQL Database YesAzure SQL Managed Instance

ストアド プロシージャ、トリガー、およびユーザー定義関数が次回実行時に再コンパイルされるようにします。 これを行うには、プロシージャ キャッシュから既存のプランを削除し、次にプロシージャまたはトリガーを実行する際に新しいプランを強制的に作成します。 SQL Server Profiler コレクションでは、イベントの代わりにイベントSP:CacheInsertSP:Recompileがログに記録されます。

Topic link iconTransact-SQL 構文表記規則

構文

sp_recompile [ @objname = ] 'object'  

引数

[ @objname= ] 'object'

現在のデータベースにあるストアド プロシージャ、トリガー、テーブル、ビュー、またはユーザー定義関数の修飾名または非修飾名を指定します。 object is nvarchar(776), with no default. オブジェクトがストアド プロシージャ、トリガー、またはユーザー定義関数の名前である場合、ストアド プロシージャ、トリガー、または関数は、次回実行されるときに再コンパイルされます。 オブジェクトがテーブルまたはビューの名前である場合、テーブルまたはビューを参照するすべてのストアド プロシージャ、トリガー、またはユーザー定義関数は、次回実行されるときに再コンパイルされます。

リターン コードの値

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

注釈

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

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

通常、このストアド プロシージャのプロアクティブな実行は不要です。 SQL Serverは、ストアド プロシージャ、トリガー、およびユーザー定義関数が有利な場合に自動的に再コンパイルします。 データベース エンジンがオブジェクトの再コンパイルを選択する理由はさまざまです。 最も一般的に、自動再コンパイルは、統計の自動更新または手動更新により、基になるカーディナリティ推定の変更に従います。

すべての実行でストアド プロシージャを再コンパイルすることは、パラメーター化によって発生するクエリ プランの問題に対処するための効率の低い方法の 1 つです。 SQL Server 2022 (16.x) プレビューで導入されたパラメーター依存プランの最適化機能は、この問題を自動的に軽減しようとします。 以前のバージョンでは、実行ごとに呼び出す sp_recompile 代わりに、次のことを検討してください。

アクセス許可

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

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

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

関連項目

次のステップ