현재 실행중인 프로 시저 이름


답변:


145

시도해 볼 수 있습니다.

SELECT OBJECT_NAME(@@PROCID)

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


4
반환 된 값이 SYSNAME 유형이라는 점은 주목할 가치가 있습니다.
Buggieboy 2015

절차가 아닌 기능을 위해 무엇을해야합니까? 어떤 생각? 도와주세요
인 Vinay 신하

1
SQL Serve 2012에서 여전히 유효
Pimenta

2
SQL Server 2016에서 여전히 유효
Fka

세션 또는 전역 임시 저장 프로 시저에 대해 작동하지 않습니다.
ajeh

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

3
임시 Proc 내에서 이것을 사용하면 스키마 이름 검색의 유무에 관계없이 NULL을 반환합니다. 다음 코드에서 첫 번째 proc은 "normal"이고 두 번째는 temp입니다. 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 2016 년

15

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

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


6

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

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)

확인 가능, 2008R2 호환성 모드에서 Enterprise 2014에서 세션 범위 지정 (## 이중)
Elaskanator

1
사실 외에, 그것이 옳다는 것 : 누가 임시 절차를 만들 것인가 ?? :-D
Tarek Salha

0

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;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.