ชื่อขั้นตอนการดำเนินการปัจจุบัน


คำตอบ:


149

คุณสามารถลองสิ่งนี้:

SELECT OBJECT_NAME(@@PROCID)

ปรับปรุง:คำสั่งนี้ยังคงใช้ได้ใน SQL Server 2016


4
เป็นที่น่าสังเกตว่าค่าที่ส่งคืนเป็นประเภท SYSNAME
Buggieboy

จะทำอย่างไรสำหรับ function not procedure? มีความคิดอย่างไร โปรดช่วย
Vinay Sinha

1
ยังคงใช้ได้ใน SQL Serve 2012
Pimenta

2
ยังคงใช้ได้บน SQL Server 2016
Fka

ไม่ทำงานสำหรับเซสชันหรือโพรซีเดอร์ที่เก็บชั่วคราวส่วนกลาง
ajeh

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

3
หากคุณใช้สิ่งนี้ภายใน temp Proc จะส่งคืนค่า NULL โดยมีหรือไม่มีการดึงชื่อสคีมา proc แรกคือ "ปกติ" ที่ 2 คือ temp ในรหัสนี้: 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

คุณสามารถใช้OBJECT_NAME (@@ PROCID)

ส่งคืนตัวระบุอ็อบเจ็กต์ (ID) ของโมดูล Transact-SQL ปัจจุบัน โมดูล Transact-SQL สามารถเป็นโพรซีเดอร์ที่เก็บไว้ฟังก์ชันที่ผู้ใช้กำหนดเองหรือทริกเกอร์


7

ในกรณีเฉพาะที่คุณสนใจชื่อของกระบวนงานที่จัดเก็บชั่วคราวที่กำลังดำเนินการอยู่ในปัจจุบันคุณสามารถรับได้ผ่านทาง:

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)

สามารถยืนยันทดสอบใน Enterprise 2014 ในโหมดความเข้ากันได้ 2008R2 กับ session-scoping (double ##)
Elaskanator

1
นอกจากข้อเท็จจริงที่ถูกต้อง: ใครจะสร้างขั้นตอนชั่วคราว ?? :-D
Tarek Salha

0

คุณสามารถตรวจสอบ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;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.