[sql-server] 현재 실행중인 프로 시저 이름

MS SQL Server에서 현재 저장 프로 시저의 이름을 가져올 수 있습니까?

시스템 변수 또는 기능이 GETDATE()있습니까?



답변

시도해 볼 수 있습니다.

SELECT OBJECT_NAME(@@PROCID)

업데이트 : 이 명령은 SQL Server 2016에서 여전히 유효합니다.


답변

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


답변

OBJECT_NAME (@@ PROCID)를 사용할 수 있습니다.

현재 Transact-SQL 모듈의 개체 식별자 (ID)를 반환합니다. Transact-SQL 모듈은 저장 프로 시저, 사용자 정의 함수 또는 트리거 일 수 있습니다.


답변

현재 실행중인 임시 저장 프로 시저 의 이름에 관심이있는 특정 경우에는 다음 을 통해 가져올 수 있습니다.

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

SQL Server에서 허용 된 대답을 사용하여 현재 실행중인 임시 저장 프로 시저의 이름을 찾을 수 없습니다.

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


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

(1 row affected)


답변

NULL저장 프로 시저의 스키마와 이름을 가져 오기 전에 확인할 수 있습니다 .

즉, (전역) 임시 저장 프로 시저에 대해서도 올바른 데이터를 얻을 수 있습니다 (더 크게 만들려면 이미지 클릭).

비 임시, 임시 및 전역 임시 저장 프로 시저의 이름

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;


답변