È possibile ottenere il nome della stored procedure corrente in MS SQL Server?
Forse esiste una variabile di sistema o una funzione simile GETDATE()
?
È possibile ottenere il nome della stored procedure corrente in MS SQL Server?
Forse esiste una variabile di sistema o una funzione simile GETDATE()
?
Risposte:
Puoi provare questo:
SELECT OBJECT_NAME(@@PROCID)
Aggiornamento: questo comando è ancora valido su SQL Server 2016.
OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID)
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
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.
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)
È possibile verificare NULL
prima 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):
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;