Mevcut yürütme prosedürü adı


Yanıtlar:


148

Bunu deneyebilirsiniz:

SELECT OBJECT_NAME(@@PROCID)

Güncelleme: Bu komut SQL Server 2016'da hala geçerlidir.


4
Dönen değerin SYSNAME türünde olduğuna dikkat etmek önemlidir.
Buggieboy

prosedür değil fonksiyon için ne yapmalı? Herhangi bir fikir? Lütfen yardım edin
Vinay Sinha

1
Hala SQL Serve 2012'de geçerli
Pimenta

2
Hala SQL Server 2016'da geçerli
Fka

Oturum veya genel geçici depolanan yordamlar için çalışmaz.
ajeh

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

3
Bunu geçici bir Proc içinde kullanırsanız, şema adı alma ile veya olmadan NULL döndürür. 1. işlem "normal", 2. süreç geçici, bu kodda: 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

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.


7

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)

Onaylanabilir, Enterprise 2014'te oturum kapsamı ile 2008R2 uyumluluk modunda test edildi (çift ##)
Elaskanator

1
yanı sıra doğrudur: Geçici prosedürleri kim yaratır? :-D
Tarek Salha

0

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):

geçici olmayan, geçici ve genel geçici depolanan yordamların adları

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;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.