我有如下10个存储过程:SP1, SP2,…,SP10这些存储过程做一些事情。我需要运行这些程序如下:执行SP1;SP2执行;…执行SP10;
当SQL server完成这些过程的执行时,它给出十行显示所有这些存储过程引起的任何行更改。我想做的是,在执行所有存储过程后,SQL Server还在输出窗口中给出每个存储过程的执行时间。我可以这样做吗?我确信,为了实现这个任务,我需要修改存储过程,但我不知道如何做到这一点……请帮帮我。谢谢。
假设管理工作室或其他环境中有输出窗格,您可以;
SET STATISTICS TIME ON
EXEC SP1
EXEC SP2
...
SET STATISTICS TIME OFF
您可以使用Sql Server Profiler用于此目的,它还提供了许多关于每个执行的查询和存储过程的有用信息。
MSDN: SQL Profiler Data Columns
SQL Profiler显示每个事件的执行时间
另一种直接的方式:
- DECLARE 2 datetime变量:start/end
- SET start = GETDATE()
- EXEC SP_NAME
- SET end = GETDATE()
- 执行时间-结束和开始的时间差
declare @start datetime = getdate()
-- your SQL statements
exec dbo.MyStoredProcedure
declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate())
您根本不需要修改SPs代码。下面的查询提供了有关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;
使用Sql Server profiler等工具有很多方法可以做到这一点,但最简单的方法是运行每个进程,并以一行打印时间:
print convert(varchar, getdate(), 21)
EXEC PROC SP1
print convert(varchar, getdate(), 21)
捕获并显示执行时间
使用两个datetime
类型的参数并在存储过程
tsql
启动前使用getdate()
设置1和tsql
之后使用getdate()
设置第二,最后使用datediff
函数得到差值