当前执行的程序名称

Ser*_*lov 90 t-sql sql-server stored-procedures sql-server-2008

是否可以在MS SQL Server中获取当前存储过程的名称?可能有任何系统变量或功能GETDATE()吗?

Ali*_*dah 136

你可以试试这个:

SELECT OBJECT_NAME(@@PROCID)
Run Code Online (Sandbox Code Playgroud)

更新:此命令在SQL Server 2016上仍然有效.

  • 值得注意的是,返回的值是SYSNAME类型. (4认同)
  • 在SQL Server 2016上仍然有效 (2认同)
  • 不适用于会话或全局临时存储过程。 (2认同)

小智 71

OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID)
Run Code Online (Sandbox Code Playgroud)

  • 如果在临时Proc中使用它,则返回NULL,无论是否有模式名称检索.第1个proc是"normal",第2个是temp,在这段代码中:`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` (2认同)

jam*_*ams 15

您可以使用OBJECT_NAME(@@ PROCID)

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


aje*_*jeh 5

在您对当前正在执行的临时存储过程的名称感兴趣的特定情况下,您可以通过以下方式获取它:

select name
from tempdb.sys.procedures
where object_id = @@procid
Run Code Online (Sandbox Code Playgroud)

您不能使用SQL Server中接受的答案来查找当前正在执行的临时存储过程的名称:

create procedure #p
as
select object_name(@@PROCID) as name
go
exec #p


name
--------------------------------------------------------------------------------------------------------------------------------
NULL

(1 row affected)
Run Code Online (Sandbox Code Playgroud)

  • 除此之外,这是正确的:谁会创建临时程序?:-D (2认同)