MS SQL Server'da mevcut Depolanan Prosedürün adını almak mümkün mü?
Belki bir sistem değişkeni veya benzeri bir işlev vardır GETDATE()?
MS SQL Server'da mevcut Depolanan Prosedürün adını almak mümkün mü?
Belki bir sistem değişkeni veya benzeri bir işlev vardır GETDATE()?
Yanıtlar:
Bunu deneyebilirsiniz:
SELECT OBJECT_NAME(@@PROCID)
Güncelleme: Bu komut SQL Server 2016'da hala geçerlidir.
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
Sen kullanabilirsiniz OBJECT_NAME (@@ PROCID)
Geçerli Transact-SQL modülünün nesne tanımlayıcısını (ID) döndürür. Bir Transact-SQL modülü bir saklı yordam, kullanıcı tanımlı işlev veya tetikleyici olabilir.
Halihazırda yürütülen geçici depolanan yordamın adıyla ilgilendiğiniz özel durumda, bunu şu yolla alabilirsiniz:
select name
from tempdb.sys.procedures
where object_id = @@procid
Şu anda yürütülen geçici depolanan yordamın adını bulmak için SQL Server'da kabul edilen yanıtı kullanamazsınız:
create procedure #p
as
select object_name(@@PROCID) as name
go
exec #p
name
--------------------------------------------------------------------------------------------------------------------------------
NULL
(1 row affected)
NULLDepolanan yordamın şemasını ve adını almadan önce kontrol edebilirsiniz .
Bu, (küresel) geçici depolanan prosedürler için bile doğru verileri alabileceğiniz anlamına gelir (büyütmek için resme tıklayın):
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;