2011-10-14 28 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()) 
相關問題