반응형
현재 실행 중인 프로시저 이름
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;
이것이 오래된 것은 알지만, 이것이 제가 사용하는 것입니다.항상 작동하는 것처럼 보입니다.
BEGIN TRAN
GO
-- Stored procedure, function of trigger
CREATE PROC dbo.TempProc AS
DECLARE @DATETIME = GETDATE()
,@Me VARCHAR(64) = COALESCE (
OBJECT_SCHEMA_NAME(@@PROCID, DB_ID())
,OBJECT_SCHEMA_NAME(@@PROCID, DB_ID('tempdb'))
,'session'
)
+ '.'
+ COALESCE (
OBJECT_NAME(@@PROCID, DB_ID())
,OBJECT_NAME(@@PROCID, DB_ID('tempdb'))
,'SQL'
)
SELECT ProcName = @Me
GO
EXEC dbo.TempProc
GO
ROLLBACK
GO
BEGIN TRAN
GO
-- Temp Stored procedure
CREATE PROC #TempProc AS
DECLARE @DATETIME = GETDATE()
,@Me VARCHAR(64) = COALESCE (
OBJECT_SCHEMA_NAME(@@PROCID, DB_ID())
,OBJECT_SCHEMA_NAME(@@PROCID, DB_ID('tempdb'))
,'session'
)
+ '.'
+ COALESCE (
OBJECT_NAME(@@PROCID, DB_ID())
,OBJECT_NAME(@@PROCID, DB_ID('tempdb'))
,'SQL'
)
SELECT ProcName = @Me
GO
EXEC #TempProc
GO
ROLLBACK
GO
-- SSMS or direct SQL statement
DECLARE @DATETIME = GETDATE()
,@Me VARCHAR(64) = COALESCE (
OBJECT_SCHEMA_NAME(@@PROCID, DB_ID())
,OBJECT_SCHEMA_NAME(@@PROCID, DB_ID('tempdb'))
,'session'
)
+ '.'
+ COALESCE (
OBJECT_NAME(@@PROCID, DB_ID())
,OBJECT_NAME(@@PROCID, DB_ID('tempdb'))
,'SQL'
)
SELECT ProcName = @Me
언급URL : https://stackoverflow.com/questions/6034488/current-executing-procedure-name
반응형
'programing' 카테고리의 다른 글
| 코드 뒤에서 JavaScript 함수 호출 (0) | 2023.05.09 |
|---|---|
| HttpModule과 HttpClientModule의 차이점 (0) | 2023.05.09 |
| UIButton 제목 UILabel 글꼴 크기를 프로그래밍 방식으로 설정 (0) | 2023.05.09 |
| VB의 null 가능한 유형입니다.NET? (0) | 2023.05.09 |
| mongodb aggregate의 문자열 값으로 $projectObjectId는 어떻게 합니까? (0) | 2023.05.09 |
