T-SQLで実現!SQL Serverで現在実行中のプロシージャ名を詳細に取得する方法
SQL Server で現在実行中のプロシージャ名を取得する方法
OBJECT_ID関数を使用する
SELECT OBJECT_NAME(OBJECT_ID(@@PROCID)) AS CurrentProcedureName;
このクエリは、現在のプロシージャのオブジェクト ID を取得し、OBJECT_NAME関数を使用してその ID に対応するプロシージャ名を返します。
sys.dm_exec_requests動的管理ビューを使用する
SELECT TOP 1 p.name AS CurrentProcedureName
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(req.sql_handle) AS sqlText
WHERE req.status = 'RUNNING'
AND req.text = 'sp_name_here';
このクエリは、sys.dm_exec_requests動的管理ビューを使用して、現在実行中のすべての要求を取得します。 次に、sys.dm_exec_sql_text動的管理関数を使用して、各要求のクエリ テキストを取得します。 最後に、WHERE 句を使用して、現在実行中のプロシージャ名と一致する要求のみをフィルター処理します。
@@PROCIDシステム変数を使用する
DECLARE @ProcName VARCHAR(128);
SET @ProcName = OBJECT_NAME(OBJECT_ID(@@PROCID));
PRINT 'Current Procedure Name: ' + @ProcName;
このコード スニペットは、@@PROCIDシステム変数を使用して現在のプロシージャのオブジェクト ID を取得し、OBJECT_NAME関数を使用してその ID に対応するプロシージャ名を返します。 次に、PRINTステートメントを使用してプロシージャ名をコンソールに出力します。
sp_current_procedureストアド プロシージャを使用する
EXEC sp_current_procedure;
このストアド プロシージャは、現在実行中のプロシージャ名を返します。
- OBJECT_ID関数 は、最もシンプルで使いやすい方法です。
- sys.dm_exec_requests動的管理ビュー は、より詳細な情報を取得する必要がある場合に使用します。
- @@PROCIDシステム変数 は、T-SQLコード内で現在の実行中のプロシージャ名を取得する必要がある場合に使用します。
- sp_current_procedureストアド プロシージャ は、ストアド プロシージャから現在の実行中のプロシージャ名を取得する必要がある場合に使用します。
例
次の例は、OBJECT_ID関数を使用して現在実行中のプロシージャ名を取得する方法を示しています。
SELECT OBJECT_NAME(OBJECT_ID(@@PROCID)) AS CurrentProcedureName;
このクエリを実行すると、次の出力が得られます。
CurrentProcedureName
MyStoredProcedure
この例では、MyStoredProcedure
という名前のプロシージャが現在実行されています。
補足
- 上記の方法は、SQL Server 2008以降で使用できます。
- プロシージャがトリガー内で実行されている場合は、これらの方法を使用してプロシージャ名を取得できない場合があります。
SELECT OBJECT_NAME(OBJECT_ID(@@PROCID)) AS CurrentProcedureName;
SELECT TOP 1 p.name AS CurrentProcedureName
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(req.sql_handle) AS sqlText
WHERE req.status = 'RUNNING'
AND req.text = 'sp_name_here';
DECLARE @ProcName VARCHAR(128);
SET @ProcName = OBJECT_NAME(OBJECT_ID(@@PROCID));
PRINT 'Current Procedure Name: ' + @ProcName;
EXEC sp_current_procedure;
説明
- 各例は、現在実行中のプロシージャ名を異なる方法で取得します。
SQL Server で現在実行中のプロシージャ名を取得するその他の方法
sys.trace_eventsストアド プロシージャを使用する
EXEC sys.trace_events
@provider_name = N'SQL Server',
@event_name = N'SP_STMT_START',
@action = 2,
@target_worker_id = @@SPID;
このストアド プロシージャは、現在の SPID で開始されたすべてのストアド プロシージャのイベントをトレースします。 出力は、現在実行中のプロシージャ名を含むいくつかの列を持つテーブルになります。
CLRを使用してSQL Server Profilerをフックする
この方法では、C# などの CLR (Common Language Runtime) 言語を使用して、SQL Server Profiler をフックし、現在実行中のプロシージャに関する情報を取得できます。 これは、より複雑な方法ですが、より多くの制御と柔軟性を提供します。
カスタム トレース イベントを作成する
この方法では、T-SQL を使用してカスタム トレース イベントを作成し、現在実行中のプロシージャに関する情報を記録できます。 これは、複雑な方法ですが、特定のニーズに合わせたイベントを記録する必要がある場合に役立ちます。
注意事項
- 上記の方法は、上級ユーザー向けであり、SQL Server の内部知識が必要です。
- これらの方法を使用する前に、SQL Server のドキュメントを参照してください。
- パフォーマンスに影響を与える可能性があるため、本番環境でこれらの方法を使用する場合は注意が必要です。
SQL Server で現在実行中のプロシージャ名を取得するには、いくつかの方法があります。 最適な方法は、状況によって異なります。 シンプルで使いやすい方法が必要な場合は、OBJECT_ID関数 または @@PROCIDシステム変数 を使用します。 より詳細な情報を取得する必要がある場合は、sys.dm_exec_requests動的管理ビュー を使用します。 複雑な方法を使用する必要がある場合は、sys.trace_eventsストアド プロシージャ 、CLRを使用したSQL Server Profilerのフック 、カスタム トレース イベントの作成 を検討してください。
sql-server sql-server-2008 t-sql