programing

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

golfzon 2023. 5. 9. 23:27
반응형

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

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

반응형