2011-05-17 60 views

回答

92

你可以试试这个:

SELECT OBJECT_NAME(@@PROCID) 

更新:这个命令仍然是SQL Server上有效的2016年

+0

它还SQL Express的2008 R2工作? – gbbosmiya 2013-11-20 06:29:00

+0

是的,它的确如此:http://technet.microsoft.com/en-us/library/ms174408.aspx – 2013-11-21 15:19:08

+4

值得注意的是,返回的值是SYSNAME类型。 – Buggieboy 2015-04-29 14:18:18

13

您可以使用OBJECT_NAME(@@PROCID)

返回对象标识符( ID) 当前的Transact-SQL模块。 A Transact-SQL模块可以是存储的 过程,用户定义的函数或 触发器。

48
OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID) 
+6

+1模式很重要。 – 2014-10-07 21:25:02

+2

如果您在临时Proc中使用它,它会返回NULL,无论是否检索模式名称。第一PROC是 “正常的”,第二是温度,在该代码:'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效用。#TempProc AS SELECT OBJECT_SCHEMA_NAME(@@ PROCID)+ '' + OBJECT_NAME(@@ PROCID) GO EXEC效用。# TempProc GO ROLLBACK GO' – SAinCA 2016-08-04 22:14:23

2

在你有兴趣在当前正在执行的临时存储过程的名称,其中的特定情况下,可以通过得到它:

select name 
from tempdb.sys.procedures 
where object_id = @@procid