เป็นไปได้ไหมที่จะรับชื่อของ Stored Procedure ปัจจุบันใน MS SQL Server
อาจจะมีตัวแปรของระบบหรือฟังก์ชันเช่นGETDATE()
?
เป็นไปได้ไหมที่จะรับชื่อของ Stored Procedure ปัจจุบันใน MS SQL Server
อาจจะมีตัวแปรของระบบหรือฟังก์ชันเช่นGETDATE()
?
คำตอบ:
คุณสามารถลองสิ่งนี้:
SELECT OBJECT_NAME(@@PROCID)
ปรับปรุง:คำสั่งนี้ยังคงใช้ได้ใน SQL Server 2016
OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID)
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
คุณสามารถใช้OBJECT_NAME (@@ PROCID)
ส่งคืนตัวระบุอ็อบเจ็กต์ (ID) ของโมดูล Transact-SQL ปัจจุบัน โมดูล 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;