Ist es möglich, den Namen der aktuellen gespeicherten Prozedur in MS SQL Server abzurufen?
Vielleicht gibt es eine Systemvariable oder eine Funktion wie GETDATE()
?
Ist es möglich, den Namen der aktuellen gespeicherten Prozedur in MS SQL Server abzurufen?
Vielleicht gibt es eine Systemvariable oder eine Funktion wie GETDATE()
?
Antworten:
Sie können dies versuchen:
SELECT OBJECT_NAME(@@PROCID)
Update: Dieser Befehl ist unter SQL Server 2016 noch gültig.
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
Sie können OBJECT_NAME (@@ PROCID) verwenden.
Gibt die Objektkennung (ID) des aktuellen Transact-SQL-Moduls zurück. Ein Transact-SQL-Modul kann eine gespeicherte Prozedur, eine benutzerdefinierte Funktion oder ein Trigger sein.
In dem speziellen Fall, in dem Sie an dem Namen der aktuell ausgeführten temporär gespeicherten Prozedur interessiert sind , können Sie ihn erhalten über:
select name
from tempdb.sys.procedures
where object_id = @@procid
Sie können die akzeptierte Antwort in SQL Server nicht verwenden, um den Namen der aktuell ausgeführten temporären gespeicherten Prozedur zu ermitteln:
create procedure #p
as
select object_name(@@PROCID) as name
go
exec #p
name
--------------------------------------------------------------------------------------------------------------------------------
NULL
(1 row affected)
Sie können überprüfen, ob NULL
bevor Sie das Schema und den Namen der gespeicherten Prozedur abrufen.
Dies bedeutet, dass Sie auch für (globale) temporär gespeicherte Prozeduren die richtigen Daten erhalten können (klicken Sie auf das Bild, um es zu vergrößern):
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;