現在実行中のプロシージャ名


回答:


143

あなたはこれを試すことができます:

SELECT OBJECT_NAME(@@PROCID)

更新:このコマンドはSQL Server 2016でも引き続き有効です。


4
戻り値のタイプがSYSNAMEであることは注目に値します。
Buggieboy、2015

手順ではなく機能に対して何をすべきか?何か案が?助けてください
Vinay Sinha 2016

1
それでも、有効なSQL 2012をサーブ
ピメンタ

2
SQL Server 2016
でも引き続き

セッションまたはグローバル一時ストアドプロシージャでは機能しません。
ajeh 2017

81
OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID)

3
これを一時プロシージャ内で使用すると、スキーマ名の取得の有無にかかわらず、NULLが返されます。次のコードでは、BEGIN TRAN GO CREATE PROC utility.TempProc AS SELECT OBJECT_SCHEMA_NAME(@@PROCID)+'.'+OBJECT_NAME(@@PROCID) GO EXEC utility.TempProc GO ROLLBACK GO BEGIN TRAN GO CREATE PROC utility.#TempProc AS SELECT OBJECT_SCHEMA_NAME(@@PROCID)+'.'+OBJECT_NAME(@@PROCID) GO EXEC utility.#TempProc GO ROLLBACK GO
最初のプロシージャ

15

OBJECT_NAME(@@ PROCID)を使用できます

現在のTransact-SQLモジュールのオブジェクト識別子(ID)を返します。Transact-SQLモジュールは、ストアドプロシージャ、ユーザー定義関数、またはトリガーにすることができます。


6

現在実行中の一時ストアドプロシージャの名前に関心がある特定のケースでは、次の方法で取得できます。

select name
from tempdb.sys.procedures
where object_id = @@procid

SQL Serverで承認された回答を使用して、現在実行中の一時ストアドプロシージャの名前を見つけることはできません。

create procedure #p
as
select object_name(@@PROCID) as name
go
exec #p


name
--------------------------------------------------------------------------------------------------------------------------------
NULL

(1 row affected)

確認でき、Enterprise 2014で2008R2互換モードとセッションスコープ(二重##)で
テスト

1
事実に加えて、それは正しいということです:誰が一時的な手順を作成しますか?:-D
Tarek Salha

0

NULLストアドプロシージャのスキーマと名前を取得する前に確認できます。

これは、(グローバル)一時ストアドプロシージャ(画像をクリックして拡大する)でも適切なデータを取得できることを意味します。

非一時、一時、およびグローバル一時ストアドプロシージャの名前

USE [master]; --so we can test temp sprocs without cheating by being in tempdb.
GO

BEGIN TRAN;
GO

CREATE PROC dbo.NotTempProc
AS
BEGIN
    SELECT CASE
        WHEN OBJECT_SCHEMA_NAME(@@PROCID) IS NULL
        THEN OBJECT_SCHEMA_NAME(@@PROCID, 2) + N'.' + OBJECT_NAME(@@PROCID, 2)
        ELSE OBJECT_SCHEMA_NAME(@@PROCID) + N'.' + OBJECT_NAME(@@PROCID)
        END AS ProcName;
END
GO

EXEC dbo.NotTempProc;
GO

CREATE PROC dbo.#TempProc
AS
BEGIN
    SELECT CASE
        WHEN OBJECT_SCHEMA_NAME(@@PROCID) IS NULL
        THEN OBJECT_SCHEMA_NAME(@@PROCID, 2) + N'.' + OBJECT_NAME(@@PROCID, 2)
        ELSE OBJECT_SCHEMA_NAME(@@PROCID) + N'.' + OBJECT_NAME(@@PROCID)
        END AS ProcName;
END
GO

EXEC dbo.#TempProc;
GO

CREATE PROC dbo.##GlobalTempProc
AS
BEGIN
    SELECT CASE
        WHEN OBJECT_SCHEMA_NAME(@@PROCID) IS NULL
        THEN OBJECT_SCHEMA_NAME(@@PROCID, 2) + N'.' + OBJECT_NAME(@@PROCID, 2)
        ELSE OBJECT_SCHEMA_NAME(@@PROCID) + N'.' + OBJECT_NAME(@@PROCID)
        END AS ProcName;
END


GO

EXEC dbo.##GlobalTempProc;
GO

ROLLBACK;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.