2011-10-14 27 views
19

我有10个存储过程如下: SP1,SP2,.....,SP10 这些存储过程做了一些事情。 我需要按如下方式运行这些过程: EXECUTE SP1; EXECUTE SP2; ... EXECUTE SP10;如何在SQL Server中查找存储过程的执行时间?

当SQL服务器完成以完成这些过程的执行时,它会提供十行显示由所有这些存储过程导致的任何行更改。 我想要做的是在执行完所有存储过程之后,SQL Server还会在输出窗口中给出每个存储过程的执行时间。 我可以这样做吗?我相信,为了实现这个任务,我需要修改存储过程,但我不知道如何去做... 请帮助我。 谢谢。 datetime类型 ,并设置一个在存储过程

使用getdate()tsql开始之前和设定的第二使用getdate()tsql后最后使用datediff函数来获得差

+1

你从您的自定义书面应用程序调用存储过程?如果是这样,什么语言? – Koekiebox

回答

13

您可以使用Sql Server Profiler为此目的它提供了很多有用的信息,每个执行查询和存储过程。

MSDN: SQL Profiler Data Columns

SQL Profiler将显示的执行时间为每个事件

的其它直接的方式:

  1. DECLARE 2的日期时间变量:开始/结束
  2. SET启动= GETDATE()
  3. EXEC SP_NAME
  4. SET端= GETDATE()
  5. 执行时间 - 结束和开始
20

假设管理工作室或一些其它环境中可以输出窗格之间的差异;

SET STATISTICS TIME ON 
EXEC SP1 
EXEC SP2 
... 
SET STATISTICS TIME OFF 
3

有办法这一点使用的工具来完成,如SQL Server Profiler中,但一个简单的方法是运行带线包围的PROC打印时间:

print convert(varchar, getdate(), 21) 
EXEC PROC SP1 
print convert(varchar, getdate(), 21) 
+0

你为什么要转换为varchar?基本上你应该做的是从运行程序之前和之后的毫秒差异 –

+0

只要这样你就可以得到一个格式化输出,例如'2011-10-14 12:32:39.403'。将它作为日期时间并不一定会给你毫秒,并且仅在报告运行时丢失**的额外数据,以防无人值守。 – Widor

+0

谢谢...几乎每种方法都有效! – Azeem

4
declare @start datetime = getdate() 

-- your SQL statements 
exec dbo.MyStoredProcedure 

declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate()) 
相关问题