执行的语句sp_executesql
看起来通常与它们出现的过程“未绑定”。通过“绑定”,我的意思是“与调用对象相关联”。
目标是让查询存储中的语句关联起来更简单:
select object_name(q.object_id) as [Statement Context]
from sys.query_store_query q
where 1=1
and object_name(q.object_id) like 'This will be the procedure name for ''normal'' statements'
虽然可以在将出现在 中的语句中嵌入注释query_sql_text
,但这感觉有点多余。
此外,似乎sp_executesql
需要某种形式的上下文绑定,因为动态 SQL可以访问周围范围内的非全局临时表:没有绑定,SQL Server 如何确保创建计划中临时表模式的有效性和稳定性?
我认为嵌入注释是目前从查询存储/扩展事件/跟踪查看时区分不同动态 SQL 的最佳方式 - 不幸的是。
我对动态 sql 和临时表有很多运行时错误,所以我认为它不能确保临时表的有效性和稳定性。
您可以使用 @@nestlevel 查看调用堆栈中当前有多少 SP / 函数,但我认为您需要更多信息。您可以使用 error_procedure() - 但只能在 catch 块中使用,听起来您想要微软添加一个函数 current_procedure() 或 calling_procedure() ,它将告诉您当前例程或调用此例程的例程的名称- 也许在这里添加一个请求?:- https://feedback.azure.com/forums/908035-sql-server