101 votes

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

Est-il possible d'obtenir le nom de la procédure stockée actuelle dans MS SQL Server ?

Il y a peut-être une variable système ou une fonction comme GETDATE() ?

155voto

Alireza Maddah Points 1745

Vous pouvez essayer ceci :

SELECT OBJECT_NAME(@@PROCID)

Mise à jour : Cette commande est toujours valable sur SQL Server 2016.

5 votes

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

0 votes

Que faire si la fonction n'est pas une procédure ? Une idée ? Merci de m'aider

1 votes

Toujours valable sur SQL Serve 2012

84voto

karthik Points 51
OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID)

3 votes

Si vous l'utilisez à l'intérieur d'une Proc temp, elle renvoie NULL, avec ou sans la récupération du nom du schéma. La première proc est "normale", la seconde est temporaire, 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

15voto

jams Points 7774

Vous pouvez utiliser NOM_OBJET(@@PROCID)

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

8voto

ajeh Points 311

Dans le cas spécifique où vous êtes intéressé par le nom de l'application en cours d'exécution temporaire procédure stockée, 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 trouver 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)

0 votes

Je peux confirmer, testé dans Enterprise 2014 en mode de compatibilité 2008R2 avec session-scoping (double ##)

2 votes

En plus du fait que c'est juste : Qui créerait des procédures temporaires ? :-D

0voto

Oreo Points 378

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

names of non-temporary, temporary, and global temporary stored procedures

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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X