gpt4 book ai didi

sql-server - 即席 SQL 查询中 @@ProcId 的返回值是什么?

转载 作者:行者123 更新时间:2023-12-04 02:07:09 27 4
gpt4 key购买 nike

我一直在研究将报告数据库上的过程执行记录到表中,并旨在提出一个通用的代码片段,可以将其复制到我们想要记录的任何过程中。

以上内容引导我尝试使用@@ProcID。 The Microsoft documentation解释说这将提供包含它的 proc、udf 或触发器的对象 ID。这是有道理的,但我也看到它在直接从新的查询窗口运行时返回一个值。我无法将这个整数与数据库中的对象 ID 关联起来 - 我不知道这个 Id 代表什么。我是正在尝试此操作的服务器的系统管理员,因此不应有任何权限限制。

我还没有在网上找到任何关于此的信息 - 唯一的 search result看起来相关的内容位于登录受限的 SAP 支持论坛上。

Use Master

select @@procid -- returns an integer
select object_name(@@procid) -- NULL
select * from sys.objects where object_id = @@ProcId -- 0 rows

最佳答案

虽然没有记录,但该值对应于 sys.dm_exec_plan_attributes 返回的缓存查询计划的 objectid 属性。其含义 documented :“对于“Adhoc”或“Prepared”类型的计划,它是批处理文本的内部哈​​希。”

为了确认这一点,以下查询返回查询本身的文本(因此对于 SQL Server 来说,它是 quine 的一种形式,尽管它在检查运行时值时会作弊):

SELECT t.[text] 
FROM sys.dm_exec_cached_plans p
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) t
CROSS APPLY sys.dm_exec_plan_attributes(p.plan_handle) a
WHERE a.attribute = 'objectid' AND a.value = @@PROCID

关于sql-server - 即席 SQL 查询中 @@ProcId 的返回值是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59564839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com