Tên thủ tục thực thi hiện tại


Câu trả lời:


143

Bạn có thể thử điều này:

SELECT OBJECT_NAME(@@PROCID)

Cập nhật: Lệnh này vẫn có hiệu lực trên SQL Server 2016.


4
Cần lưu ý rằng giá trị trả về thuộc loại SYSNAME.
Buggieboy

những gì để làm cho chức năng không thủ tục? bất kỳ ý tưởng? Xin hãy giúp đỡ
Vinay Sinha

1
Vẫn còn hiệu lực trên SQL Serve 2012
Pimenta

2
Vẫn hợp lệ trên SQL Server 2016
Fka

Không hoạt động cho phiên hoặc thủ tục lưu trữ tạm thời toàn cầu.
ajeh

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

3
Nếu bạn sử dụng nó bên trong một Proc tạm thời, nó sẽ trả về NULL, có hoặc không có truy xuất tên lược đồ. Proc đầu tiên là "bình thường", proc thứ 2 là tạm thời, trong mã này: 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

Bạn có thể sử dụng OBJECT_NAME (@@ PROCID)

Trả về mã định danh đối tượng (ID) của mô-đun Transact-SQL hiện tại. Mô-đun Transact-SQL có thể là một thủ tục được lưu trữ, chức năng do người dùng xác định hoặc trình kích hoạt.


6

Trong trường hợp cụ thể mà bạn quan tâm đến tên của thủ tục được lưu trữ tạm thời hiện đang thực thi , bạn có thể lấy nó qua:

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

Bạn không thể sử dụng câu trả lời được chấp nhận trong SQL Server để tìm tên của thủ tục được lưu trữ tạm thời hiện đang thực thi:

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


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

(1 row affected)

Có thể xác nhận, đã kiểm tra trong Enterprise 2014 ở chế độ tương thích 2008R2 với phân vùng phiên (double ##)
Elaskanator

1
ngoài thực tế, nó là đúng: Ai sẽ tạo ra các thủ tục tạm thời ?? :-D
Tarek Salha

0

Bạn có thể kiểm tra NULLtrước khi nhận được lược đồ và tên của thủ tục được lưu trữ.

Điều này có nghĩa là bạn có thể nhận được dữ liệu phù hợp ngay cả cho các thủ tục được lưu trữ tạm thời (toàn cầu) (nhấp vào hình ảnh để phóng to hơn):

tên của các thủ tục lưu trữ tạm thời không tạm thời, tạm thời và toàn cầu

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;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.