Current executing procedure name

前端 未结 5 1199
情歌与酒
情歌与酒 2020-12-23 15:57

Is it possible to get the name of the current Stored Procedure in MS SQL Server?

Maybe there is a system variable or function like GETDATE()?

相关标签:
5条回答
  • 2020-12-23 16:06

    You can use OBJECT_NAME(@@PROCID)

    Returns the object identifier (ID) of the current Transact-SQL module. A Transact-SQL module can be a stored procedure, user-defined function, or trigger.

    0 讨论(0)
  • 2020-12-23 16:12

    You can check for NULL before getting the schema and name of the stored procedure.

    This means that you can get the right data even for (global) temporary stored procedures (click image to make bigger):

    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;
    
    0 讨论(0)
  • 2020-12-23 16:13
    OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID)
    
    0 讨论(0)
  • 2020-12-23 16:13

    In the specific case where you are interested in the name of the currently executing temporary stored procedure, you can get it via:

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

    You cannot use the accepted answer in SQL Server to find the name of the currently executing temporary stored procedure:

    create procedure #p
    as
    select object_name(@@PROCID) as name
    go
    exec #p
    
    
    name
    --------------------------------------------------------------------------------------------------------------------------------
    NULL
    
    (1 row affected)
    
    0 讨论(0)
  • 2020-12-23 16:28

    You may try this:

    SELECT OBJECT_NAME(@@PROCID)
    

    Update: This command is still valid on SQL Server 2016.

    0 讨论(0)
提交回复
热议问题