MS SQL Server에서 현재 저장 프로 시저의 이름을 가져올 수 있습니까?
시스템 변수 또는 기능이 GETDATE()
있습니까?
MS SQL Server에서 현재 저장 프로 시저의 이름을 가져올 수 있습니까?
시스템 변수 또는 기능이 GETDATE()
있습니까?
답변:
시도해 볼 수 있습니다.
SELECT OBJECT_NAME(@@PROCID)
업데이트 : 이 명령은 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
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;