Current executing procedure name

Sql ServerSql Server-2008TsqlStored Procedures

Sql Server Problem Overview


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()?

Sql Server Solutions


Solution 1 - Sql Server

You may try this:

SELECT OBJECT_NAME(@@PROCID)

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

Solution 2 - Sql Server

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

Solution 3 - Sql Server

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.

Solution 4 - Sql Server

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)

Solution 5 - Sql Server

I know this is old, but this is what I use. It appears to always work.

BEGIN TRAN 
GO 
-- Stored procedure, function of trigger
CREATE PROC dbo.TempProc AS 
	DECLARE @ DATETIME = GETDATE(), @Me VARCHAR(64) = COALESCE(OBJECT_SCHEMA_NAME(@@PROCID, DB_ID()), OBJECT_SCHEMA_NAME(@@PROCID, DB_ID('tempdb')),'session')+'.'+COALESCE(OBJECT_NAME(@@PROCID, DB_ID()) , OBJECT_NAME(@@PROCID, DB_ID('tempdb')),'SQL')
	SELECT ProcName = @Me
GO
EXEC dbo.TempProc 
GO
ROLLBACK 
GO
BEGIN TRAN 
GO
-- Temp Stored procedure
CREATE PROC #TempProc AS 
	DECLARE @ DATETIME = GETDATE(), @Me VARCHAR(64) = COALESCE(OBJECT_SCHEMA_NAME(@@PROCID, DB_ID()), OBJECT_SCHEMA_NAME(@@PROCID, DB_ID('tempdb')),'session')+'.'+COALESCE(OBJECT_NAME(@@PROCID, DB_ID()) , OBJECT_NAME(@@PROCID, DB_ID('tempdb')),'SQL')
	SELECT ProcName = @Me
GO
EXEC #TempProc 
GO
ROLLBACK
GO
-- SSMS or direct SQL statement
DECLARE @ DATETIME = GETDATE(), @Me VARCHAR(64) = COALESCE(OBJECT_SCHEMA_NAME(@@PROCID, DB_ID()), OBJECT_SCHEMA_NAME(@@PROCID, DB_ID('tempdb')),'session')+'.'+COALESCE(OBJECT_NAME(@@PROCID, DB_ID()) , OBJECT_NAME(@@PROCID, DB_ID('tempdb')),'SQL')
SELECT ProcName = @Me

Solution 6 - Sql Server

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):

names of non-temporary, temporary, and global temporary stored procedures

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;

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSergey MetlovView Question on Stackoverflow
Solution 1 - Sql ServerAlireza MaddahView Answer on Stackoverflow
Solution 2 - Sql ServerkarthikView Answer on Stackoverflow
Solution 3 - Sql ServerjamsView Answer on Stackoverflow
Solution 4 - Sql ServerajehView Answer on Stackoverflow
Solution 5 - Sql ServerGord GrayView Answer on Stackoverflow
Solution 6 - Sql ServerOreoView Answer on Stackoverflow