开发者社区> 问答> 正文

临时SQL查询中@@ ProcId的返回值是什么?

我一直在研究将报告数据库中的过程执行记录到表中,目的是提出通用的代码段,这些代码段可以复制到我们要记录的任何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

展开
收起
Puppet 2020-01-03 11:35:55 1061 0
1 条回答
写回答
取消 提交回答
  • 这取决于您使用什么工具来提交命令。许多工具会创建一个包含您的命令的临时存储过程(例如,使用ODBC准备语句),然后运行该过程。

    推测可能是该工具正在检测该语句未更改,因此重新使用了先前准备的语句。在这种情况下,将不涉及SQL Server,而是客户端库。

    或者,可能是服务器检测到sql未更改,并且保留的procid是查询计划缓存系统的结果。(SQL Server尝试检测重复的即席语句并通过重新使用它们的计划来进行优化。)

    无论哪种方式,您都应该将其视为一种好奇心,而不是依靠它来确保系统的正确运行,因为系统可能会随着SQL Server或客户端库的更新而发生变化。

    2020-01-03 11:36:34
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PolarDB NL2SQL: 帮助您写出准确、优化的SQL 立即下载
SQL Sever迁移PG经验 立即下载
Spark SQL最佳实践 立即下载