Est-il possible d'obtenir le nom de la procédure stockée actuelle dans MS SQL Server?
Peut-être qu'il y a une variable système ou une fonction comme GETDATE()
?
Est-il possible d'obtenir le nom de la procédure stockée actuelle dans MS SQL Server?
Peut-être qu'il y a une variable système ou une fonction comme GETDATE()
?
Réponses:
Vous pouvez essayer ceci:
SELECT OBJECT_NAME(@@PROCID)
Mise à jour: cette commande est toujours valide sur 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
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.
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)
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):
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;