我有10个存储过程如下:SP1,SP2,.....,SP10这些存储过程做了一些事情.我需要按如下方式运行这些过程:EXECUTE SP1; 执行SP2; ... EXECUTE SP10;
当SQL服务器完成这些过程的执行时,它会显示十行,显示由所有这些存储过程引起的任何行更改. 我想要做的是,在执行所有存储过程之后,SQL Server还在输出窗口中为每个存储过程提供执行时间. 我能这样做吗?我确信为了完成这个任务我需要修改存储过程,但我不知道该怎么做...请帮助我.谢谢.
Ale*_* K. 27
假设管理工作室或其他具有输出窗格的环境,您可以;
SET STATISTICS TIME ON
EXEC SP1
EXEC SP2
...
SET STATISTICS TIME OFF
Run Code Online (Sandbox Code Playgroud)
sll*_*sll 14
您可以使用Sql Server Profiler来实现此目的,它还在每个执行的查询和存储过程中提供了许多有用的信息.
SQL事件探查器显示每个事件的执行时间
另一种直截了当的方式:
小智 8
您根本不需要修改 SP 代码。以下查询为您提供了有关 SP 执行时间的一些统计信息。
SELECT
DB_NAME(database_id) [database],
OBJECT_NAME(object_id) [stored_procedure],
cached_time,
last_execution_time,
execution_count,
total_elapsed_time/execution_count [avg_elapsed_time],
[type_desc]
FROM sys.dm_exec_procedure_stats
--WHERE OBJECT_NAME(object_id) IN ('SP1','SP2','SP3','SP4','SP5')
ORDER BY avg_elapsed_time desc;
Run Code Online (Sandbox Code Playgroud)
去尝试一下。
declare @start datetime = getdate()
-- your SQL statements
exec dbo.MyStoredProcedure
declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate())
Run Code Online (Sandbox Code Playgroud)
有一些方法可以使用 Sql Server profiler 等工具来做到这一点,但一个简单的方法是运行每个 proc 用一行包围来打印时间:
print convert(varchar, getdate(), 21)
EXEC PROC SP1
print convert(varchar, getdate(), 21)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52271 次 |
| 最近记录: |