BlueChippy Asked: 2016-07-16 03:08:25 +0800 CST2016-07-16 03:08:25 +0800 CST 2016-07-16 03:08:25 +0800 CST 我可以判断存储过程是否已针对特定数据库执行吗? 772 作为发布的结果,数据库表现得“异常”。我怀疑在最近的版本中遗漏了一个存储过程,但是我的 DBA 告诉我它 100% 已执行。 有没有办法明确证明它是或不是? sql-server sql-server-2008 2 个回答 Voted TheGameiswar 2016-07-16T06:56:15+08:002016-07-16T06:56:15+08:00 从 SQL Server 2008 开始,使用 can 可以sys.dm_exec_procedure_stats为您提供上次执行存储过程的状态 select db_name(database_id) as dbname,last_execution_time from sys.dm_exec_procedure_stats Best Answer Solomon Rutzky 2016-07-16T07:05:22+08:002016-07-16T07:05:22+08:00 (强调) 有什么方法可以明确证明它是/不是 不,没有办法以任何明确的方式证明它已被执行,除了对存储过程进行编码以执行诸如将记录插入日志表以显示它已被执行的操作之外。在您的特定情况下,这还需要一台时间机器才能将其放置到位,而且我不认为这些甚至可以首先创建:-(。 有可以跟踪执行情况的 DMV,但由于各种原因它们会被清除: 服务重启 DBCC FREESYSTEMCACHE('ALL') 内存压力 也许其他人 当然,如果您确实在任何 DMV 中看到它,那确实证明它已被执行,但您最好截屏,因为下次您运行该查询以向某人显示它在那里时它可能会消失 ;-)。但是,在 DMV 中找不到它并不能证明它从未被执行过。 因此,除了@TheGameiswar 建议的查询之外,您还可以尝试以下操作: SELECT qplan.[objectid], qplan.[dbid], OBJECT_NAME(qplan.[objectid], qplan.[dbid]) FROM sys.dm_exec_cached_plans cplan CROSS APPLY sys.dm_exec_query_plan(cplan.[plan_handle]) qplan WHERE qplan.[objectid] IS NOT NULL;
从 SQL Server 2008 开始,使用 can 可以sys.dm_exec_procedure_stats为您提供上次执行存储过程的状态
(强调)
不,没有办法以任何明确的方式证明它已被执行,除了对存储过程进行编码以执行诸如将记录插入日志表以显示它已被执行的操作之外。在您的特定情况下,这还需要一台时间机器才能将其放置到位,而且我不认为这些甚至可以首先创建:-(。
有可以跟踪执行情况的 DMV,但由于各种原因它们会被清除:
当然,如果您确实在任何 DMV 中看到它,那确实证明它已被执行,但您最好截屏,因为下次您运行该查询以向某人显示它在那里时它可能会消失 ;-)。但是,在 DMV 中找不到它并不能证明它从未被执行过。
因此,除了@TheGameiswar 建议的查询之外,您还可以尝试以下操作: