获取在SQl Server 2008 R2中执行脚本的持续时间

时间:2012-03-13 10:03:12

标签: sql sql-server sql-server-2008 tsql sql-server-2008-r2

我有一个要执行的脚本,需要执行持续时间,我该如何计算呢?

我想用这种方式:

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

--Script


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

PRINT 'Transfer Duration:';
GO
PRINT CONVERT(varchar,@endTime-@startTime,14);
GO

但是因为我使用GO(我必须)所以有一个错误,那么你有什么建议来计算和打印执行脚本的持续时间(Go)?

3 个答案:

答案 0 :(得分:4)

查看SET STATISTICS TIME声明。

答案 1 :(得分: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的冲突。

答案 2 :(得分:0)

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

-- your sql statement

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

PRINT 'Transfer Duration:';

PRINT cast((@endTime-@startTime) AS TIME);
Go

或者更准确一点,您可以使用SET STATISTICS TIME来显示解析,编译和执行每个语句所需的毫秒数。