Nom de la procédure en cours d'exécution


Réponses:


143

Vous pouvez essayer ceci:

SELECT OBJECT_NAME(@@PROCID)

Mise à jour: cette commande est toujours valide sur SQL Server 2016.


4
Il convient de noter que la valeur renvoyée est de type SYSNAME.
Buggieboy

que faire pour la fonction et non la procédure? une idée? S'il vous plaît aider
Vinay Sinha

1
Toujours valide sur SQL Serve 2012
Pimenta

2
Toujours valide sur SQL Server 2016
Fka

Ne fonctionne pas pour la session ou les procédures stockées temporaires globales.
ajeh

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

3
Si vous l'utilisez dans un Proc temporaire, il renvoie NULL, avec ou sans la récupération du nom de schéma. 1er proc est "normal", 2ème est temp, dans ce 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

15

Vous pouvez utiliser OBJECT_NAME (@@ PROCID)

Renvoie l'identificateur d'objet (ID) du module Transact-SQL actuel. Un module Transact-SQL peut être une procédure stockée, une fonction définie par l'utilisateur ou un déclencheur.


6

Dans le cas spécifique où vous êtes intéressé par le nom de la procédure stockée temporaire en cours d'exécution , vous pouvez l'obtenir via:

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

Vous ne pouvez pas utiliser la réponse acceptée dans SQL Server pour rechercher le nom de la procédure stockée temporaire en cours d'exécution:

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


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

(1 row affected)

Peut confirmer, testé en entreprise 2014 en mode de compatibilité 2008R2 avec portée de session (double ##)
Elaskanator

1
outre le fait qu'il a raison: qui créerait des procédures temporaires ?? :-D
Tarek Salha

0

Vous pouvez vérifier NULL avant d'obtenir le schéma et le nom de la procédure stockée.

Cela signifie que vous pouvez obtenir les bonnes données même pour les procédures stockées temporaires (globales) (cliquez sur l'image pour l'agrandir):

noms des procédures stockées temporaires non temporaires, temporaires et globales

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;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.