Nama prosedur pelaksanaan saat ini


Jawaban:


145

Anda dapat mencoba ini:

SELECT OBJECT_NAME(@@PROCID)

Pembaruan: Perintah ini masih berlaku di SQL Server 2016.


4
Perlu dicatat bahwa nilai yang dikembalikan adalah tipe SYSNAME.
Buggieboy

apa yang harus dilakukan untuk fungsi bukan prosedur? ada ide? Tolong bantu
Vinay Sinha

1
Masih valid di SQL Serve 2012
Pimenta

2
Masih valid di SQL Server 2016
Fka

Tidak berfungsi untuk sesi atau prosedur penyimpanan sementara global.
ajeh

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

3
Jika Anda menggunakan ini di dalam Proc temp, ia mengembalikan NULL, dengan atau tanpa pengambilan nama skema. Proc pertama adalah "normal", kedua adalah temp, dalam kode ini: 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

15

Anda dapat menggunakan OBJECT_NAME (@@ PROCID)

Mengembalikan pengenal objek (ID) dari modul Transact-SQL saat ini. Modul Transact-SQL dapat berupa prosedur tersimpan, fungsi yang ditentukan pengguna, atau pemicu.


6

Dalam kasus khusus di mana Anda tertarik dengan nama prosedur tersimpan sementara yang sedang dijalankan , Anda bisa mendapatkannya melalui:

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

Anda tidak dapat menggunakan jawaban yang diterima di SQL Server untuk menemukan nama prosedur tersimpan sementara yang sedang dijalankan:

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


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

(1 row affected)

Dapat mengonfirmasi, diuji di Enterprise 2014 dalam mode kompatibilitas 2008R2 dengan cakupan sesi (double ##)
Elaskanator

1
Selain fakta, itu benar: Siapa yang akan membuat prosedur sementara ?? :-D
Tarek Salha

0

Anda bisa memeriksanya NULL sebelum mendapatkan skema dan nama prosedur tersimpan.

Ini berarti Anda bisa mendapatkan data yang benar bahkan untuk prosedur yang disimpan sementara (global) (klik gambar untuk memperbesar):

nama prosedur penyimpanan sementara non-sementara, sementara, dan global

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;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.