Чи можна отримати назву поточної збереженої процедури в 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)
Повертає ідентифікатор об'єкта (ID) поточного модуля Transact-SQL. Модуль Transact-SQL може бути збереженою процедурою, визначеною користувачем функцією або тригером.
У конкретному випадку, коли вас цікавить ім'я виконуваної в даний час тимчасово збереженої процедури, ви можете отримати її за допомогою:
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)
Ви можете перевірити наявність, 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;