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;
6条答案
按热度按时间guicsvcw1#
你可以试试这个:
wooyq4lh2#
niwlg2el3#
您可以使用OBJECT_NAME(@@PROCID)
返回当前Transact-SQL模块的对象标识符(ID)。Transact-SQL模块可以是存储过程、用户定义函数或触发器。
px9o7tmv4#
在您对当前正在执行的temporary存储过程的名称感兴趣的特定情况下,您可以通过以下方式获取它:
不能使用SQL Server中接受的答案来查找当前正在执行的临时存储过程的名称:
e4yzc0pl5#
在获取存储过程的架构和名称之前,可以检查
NULL
。这意味着您甚至可以为(全局)临时存储过程获取正确的数据(单击图像放大):
ogsagwnx6#
我知道这是旧的,但这是我用的。它似乎总是有效的。