我一直在研究将报告数据库中的过程执行记录到表中,目的是提出通用的代码段,这些代码段可以复制到我们要记录的任何proc中。
上面的内容使我可以使用@@ ProcID。Microsoft文档解释说,这将提供proc,udf或包含它的触发器的对象ID。这是有道理的,但我还看到直接从新查询窗口运行时,它返回一个值。我无法将此整数与数据库中的对象ID相关联-我不知道此ID代表什么。我正在尝试在服务器上使用sysadmin,因此不应有任何权限限制。
我没有找到关于此的任何在线信息-唯一相关的搜索结果是在登录受限的SAP支持论坛上。
Use Master
select @@procid -- returns an integer
select object_name(@@procid) -- NULL
select * from sys.objects where object_id = @@ProcId -- 0 rows
这取决于您使用什么工具来提交命令。许多工具会创建一个包含您的命令的临时存储过程(例如,使用ODBC准备语句),然后运行该过程。
推测可能是该工具正在检测该语句未更改,因此重新使用了先前准备的语句。在这种情况下,将不涉及SQL Server,而是客户端库。
或者,可能是服务器检测到sql未更改,并且保留的procid是查询计划缓存系统的结果。(SQL Server尝试检测重复的即席语句并通过重新使用它们的计划来进行优化。)
无论哪种方式,您都应该将其视为一种好奇心,而不是依靠它来确保系统的正确运行,因为系统可能会随着SQL Server或客户端库的更新而发生变化。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。