Nome della procedura in esecuzione corrente


Risposte:


143

Puoi provare questo:

SELECT OBJECT_NAME(@@PROCID)

Aggiornamento: questo comando è ancora valido su SQL Server 2016.


4
Vale la pena notare che il valore restituito è di tipo SYSNAME.
Buggieboy

cosa fare per la funzione non la procedura? qualche idea? Per favore aiuto
Vinay Sinha

1
Ancora valido su SQL Serve 2012
Pimenta

2
Ancora valido su SQL Server 2016
Fka

Non funziona per la sessione o per le stored procedure temporanee globali.
ajeh

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

3
Se lo usi all'interno di un Proc temporaneo, restituisce NULL, con o senza il recupero del nome dello schema. Il primo proc è "normale", il secondo è temp, in questo codice: 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
SAinCA

15

Puoi usare OBJECT_NAME (@@ PROCID)

Restituisce l'identificatore di oggetto (ID) del modulo Transact-SQL corrente. Un modulo Transact-SQL può essere una stored procedure, una funzione definita dall'utente o un trigger.


6

Nel caso specifico in cui sei interessato al nome della stored procedure temporanea attualmente in esecuzione , puoi ottenerlo tramite:

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

Non è possibile utilizzare la risposta accettata in SQL Server per trovare il nome della stored procedure temporanea attualmente in esecuzione:

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


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

(1 row affected)

Può confermare, testato in Enterprise 2014 in modalità di compatibilità 2008R2 con session-scoping (double ##)
Elaskanator

1
oltre al fatto che è giusto: chi creerebbe procedure temporanee ?? :-D
Tarek Salha

0

È possibile verificare NULLprima di ottenere lo schema e il nome della procedura memorizzata.

Ciò significa che è possibile ottenere i dati corretti anche per stored procedure temporanee (globali) (fare clic sull'immagine per ingrandirla):

nomi di stored procedure temporanee non temporanee, temporanee e globali

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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.