क्या MS SQL Server में वर्तमान संग्रहित प्रक्रिया का नाम प्राप्त करना संभव है?
हो सकता है कि कोई सिस्टम वेरिएबल या फंक्शन जैसा हो GETDATE()?
क्या 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) का उपयोग कर सकते हैं
वर्तमान Transact-SQL मॉड्यूल के ऑब्जेक्ट पहचानकर्ता (ID) को लौटाता है। एक लेनदेन-एसक्यूएल मॉड्यूल एक संग्रहीत प्रक्रिया, उपयोगकर्ता-परिभाषित फ़ंक्शन या ट्रिगर हो सकता है।
उस विशिष्ट मामले में जहां आप वर्तमान में अस्थायी संग्रहीत कार्यविधि को निष्पादित करने के नाम पर रुचि रखते हैं , आप इसे प्राप्त कर सकते हैं:
select name
from tempdb.sys.procedures
where object_id = @@procid
वर्तमान में निष्पादित अस्थायी संग्रहीत कार्यविधि का नाम खोजने के लिए आप SQL सर्वर में स्वीकृत उत्तर का उपयोग नहीं कर सकते हैं:
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;