Aktueller Name der ausführenden Prozedur


Antworten:


143

Sie können dies versuchen:

SELECT OBJECT_NAME(@@PROCID)

Update: Dieser Befehl ist unter SQL Server 2016 noch gültig.


4
Es ist erwähnenswert, dass der zurückgegebene Wert vom Typ SYSNAME ist.
Buggieboy

Was tun für Funktion nicht Prozedur? irgendeine Idee? Bitte helfen Sie
Vinay Sinha

1
Noch gültig auf SQL Serve 2012
Pimenta

2
Noch gültig auf SQL Server 2016
Fka

Funktioniert nicht für die Sitzung oder globale temporäre gespeicherte Prozeduren.
Ajeh

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

3
Wenn Sie dies in einem temporären Proc verwenden, wird NULL mit oder ohne Abrufen des Schemanamens zurückgegeben. 1. Prozess ist "normal", 2. ist Temp, in diesem Code: 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


6

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)

Kann bestätigen, getestet in Enterprise 2014 im 2008R2-Kompatibilitätsmodus mit Session-Scoping (double
##

1
neben der Tatsache, dass es richtig ist: Wer würde temporäre Verfahren erstellen? :-D
Tarek Salha

0

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

Namen von nicht temporären, temporären und globalen temporären gespeicherten Prozeduren

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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.