Поточна назва процедури виконання


Відповіді:


143

Ви можете спробувати це:

SELECT OBJECT_NAME(@@PROCID)

Оновлення: Ця команда все ще діє на SQL Server 2016.


4
Варто зазначити, що повернене значення має тип SYSNAME.
Buggieboy

що робити для функції, а не процедури? будь-яка ідея? Будь ласка, допоможіть
Vinay Sinha

1
Все ще діє на SQL Serve 2012
Pimenta,

2
Все ще діє на SQL Server 2016
Fka

Не працює для сеансу або глобальних тимчасово збережених процедур.
ajeh

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

3
Якщо ви використовуєте це всередині тимчасового Proc, воно повертає NULL, з або без отримання імені схеми. 1-й процес є "нормальним", 2-й - тимчасовим, у цьому коді: 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

Ви можете використовувати OBJECT_NAME (@@ PROCID)

Повертає ідентифікатор об'єкта (ID) поточного модуля Transact-SQL. Модуль Transact-SQL може бути збереженою процедурою, визначеною користувачем функцією або тригером.


6

У конкретному випадку, коли вас цікавить ім'я виконуваної в даний час тимчасово збереженої процедури, ви можете отримати її за допомогою:

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)

Може підтвердити, протестовано в Enterprise 2014 у режимі сумісності 2008R2 із
масштабуванням

1
крім того, що це правильно: хто б створював тимчасові процедури ?? :-D
Тарек Салха

0

Ви можете перевірити наявність, 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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.