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)
NULL
Depolanan 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;