2012-03-13 15 views
4

実行するスクリプトがあり、実行時間が必要です。どのように計算できますか?SQl Server 2008 R2でスクリプトを実行する時間を取得

は、私はこの方法を使用すると思う:

DECLARE @startTime DATETIME 
SET @startTime = GETDATE(); 

--Script 


DECLARE @endTime DATETIME 
SET @endTime = GETDATE(); 

PRINT 'Transfer Duration:'; 
GO 
PRINT CONVERT(varchar,@[email protected],14); 
GO 

をしかし、私はGOを使用して(と私が持っている)ので、エラーがあるので、だからあなたの計算に提案し、スクリプトを実行する印刷時間は(とものですGo)?

答えて

4

テーブルを使用して開始時刻と終了時刻を格納し、プロセスIDをスローします。次に、DATEDIFF()を使用して経過時間を計算します。

CREATE TABLE Profiling(
      spid   smallint  NOT NULL, 
      StartTime  DATETIME2  NOT NULL, 
      EndTime   DATETIME2 
    ) 

    INSERT INTO Profiling(spid, StartTime) 
    SELECT @@SPID, CURRENT_TIMESTAMP 
    GO 

    -- your queries come here 
    -- ..... 

    UPDATE Profiling 
    SET EndTime = CURRENT_TIMESTAMP 
    WHERE spid = @@SPID 
    GO 

    SELECT DATEDIFF(MS, startTime, EndTime) as MilliSeconds 
    FROM Profiling 
    WHERE spid = @@SPID 

SPID年代の衝突を避けるために、時間から時間にテーブルを切り捨てます。

+0

構文が無効です。あなたの一時変数は「go」と書いてすぐに消えます –

+0

「無効な構文」ですか?どのようなRDBMSを入手しましたか?これは、SQL Server 2005で完璧に動作します。 "あなたの一時変数" ??上記のコードでは、単一の(一時的な)変数は一切使用されていません! @@ SPIDはTranact-SQL関数のビルドであり、変数ではありません。トローリングをやめてください。 – Wim

+0

私はappologize、私は何か似たようなものを試して失敗した、あなたのスクリプトは正常に動作します –

4

SET STATISTICS TIMEをご覧ください。

+0

ありがとうございましたが、 'STATISTIC Time'は' GO 'で区切られたコマンドのバッチの時間を計算し、実際にはこのスクリプトの実行時間が2倍になりました。また、スクリプト。 – Saeid

0
Go 
DECLARE @startTime DATETIME 
SET @startTime = GETDATE(); 

-- your sql statement 

DECLARE @endTime DATETIME 
SET @endTime = GETDATE(); 

PRINT 'Transfer Duration:'; 

PRINT cast((@[email protected]) AS TIME); 
Go 

またはあなたは、解析、コンパイル、および各ステートメントを実行するのに必要な時間をミリ秒単位で表示しSET STATISTICS TIMEを使用することができ、より正確なものにします。

+0

'DATETIME'の精度は3.33msしかないので、これはあまり正確ではなく非常に有用なものではないと私は思います..... SQL Server 2008は100nsの精度で' DATETIME2'を持つでしょう - (PS:私はdownvoteしませんでした - あなたのお勧めのソリューションの欠点を指摘しようとしています) –

+0

@marc_sこれを指摘してくれてありがとう。 –

+0

@Viswanathan Iyer答えていただきありがとうございますが、主な質問では、私はGOコマンドを使用しなければならないことを強調します。 – Saeid

関連する問題