我被要求确定存储过程的权限问题。此存储过程有两种可能的行为方式,具体取决于其参数使用的值。
exec ps_my_stored_procedure @a=1, @b=2, @c=3
处理方式与
exec ps_my_stored_procedure @a=5, @b=7, @c=0
您可以说这ps_my_stored_procedure
在逻辑上分为两个完全独立的过程。
使用dm_exec_procedure_stats
and dm_exec_query_stats
,我可以找到显示使用的存储过程的 SQL 的执行计划。但是,我无法恢复参数的定义方式和值。
是否可以使用dm_exec_procedure_stats
和dm_exec_query_stats
任何其他管理视图来重建显示用于其参数的值的存储过程的执行。
我真正想要的是在缓存中找到存储过程的实际执行,以便我可以按原样执行它EXECUTE AS LOGIN = 'someone'
来解决权限问题
我经常使用从http://www.sommarskog.se/query-plan-mysteries.html#otherreasons获取的以下查询来返回嗅探值。另一种方法是在SQL Sentry Plan Explorer中打开计划并选择参数选项卡。假设您正在查看实际执行计划,XML 方法和计划资源管理器方法都将显示运行时值。
如果您有执行计划,您可以将其查看为 xml,并搜索已编译的参数值
例如,这是来自我的计划缓存中的一个查询的执行计划的实际片段:
如果您的计划被重用,它将在编译时显示该值。