@@procid 是什么意思?

4
问题: 我有一个查询文件,其中包含@@procid语句。我想知道它的用途和意义。我是新手,如果这很傻,请原谅。

问题: 在我的搜索中,在这个网站上,我了解到它返回当前Transact-SQL模块的过程ID,但这是什么?什么是“Transact-SQL模块”?它不应该返回某些除法的余数(这里)吗?我没有理解那个页面上显示的例子。

还是我误解了这个?


1
它不是“模数”或“余数”,而是“模块”。它与某些除法的余数无关 - 它们是不同的单词。 - Ken White
2个回答

14

@@procid是与当前执行的存储过程、触发器或用户定义函数相关联的标识符。它是SQL Server用于在系统中跟踪这些项的内部编号。因此,通过此id,您可以查找与其关联的对象。因此,在以下示例中:

SET @ProcName = OBJECT_NAME(@@PROCID);

获取过程名称,因为OBJECT_NAME是一个函数,从@@PROCID获取名称。

这个例子有点牵强,因为最终问题变成了“为什么不直接硬编码名称?” @@Proc的重点在于,如果您不知道正在执行什么(例如动态代码等),则可以确定此时正在执行什么而无需在各处硬编码该信息。


谢谢!这非常适合。 - Lupiyo

1
这里借鉴,Module是一个术语,用于存储过程、存储函数、触发器或视图定义。当您在SQL数据库中创建这些对象之一时,它会在系统表中创建一个条目,包括表sys.sql_modules。这些被赋予一个OBJECT_ID,您可以使用它们来识别它们(并且系统函数@@PROCID编码为返回它们)。
你问题的第二个项目,MODULO函数,返回除法余数:例如,三除以三的余数为0,四除以三的余数为1,五除以三的余数为2。
虽然它们在使用方面相距甚远,但两者之间有一个字母的差异:第一个以'E'结尾(MODULE),而第二个以'O'结尾(MODULO)。

是的,我刚看到了。对此感到抱歉,谢谢! - Lupiyo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接