为什么 DATEDIFF 在第一次执行后结果会加倍?

Why would DATEDIFF double the result after first execution?

我正在使用以下技术粗略计算通过 SSMS (SQL Server Management Studio) 执行存储过程所用的时间:

USE [MyDB]
GO

DECLARE @t1 DATETIME;
DECLARE @t2 DATETIME;
SET @t1 = GETDATE();

DECLARE @TTIdsList dbo.TTIdsList_ident
INSERT INTO @TTIdsList(Id)
VALUES (7890137988314100)
DECLARE @return_value int
EXEC    @return_value = [mySCH].[DataLoadByList]
        @CaseIds = @TTIdsList
SELECT  'Return Value' = @return_value

SET @t2 = GETDATE();
SELECT DATEDIFF(microsecond,@t1,@t2) AS elapsed_us;
GO

它工作得很好,但 returns 第一次执行时的结果不同(3000 微秒)。在所有后续执行中,它 returns 加倍:6000 微秒。

我是否遗漏了这些变量的初始化方式?如果是这样,我错过了什么?

TSQL datetime 没有微秒分辨率。分辨率为 1/300 秒,四舍五入到小数点后三位。

这意味着如果实际经过的时间在 1/300 秒和 2/300 秒之间,您有时会得到 3 毫秒,有时会得到 6 毫秒的差异。

要获得实际值,您需要具有所需分辨率的时间测量。尝试使用数据类型 datetime2 和函数 SYSUTCDATETIME(),它们确实有足够的精度来回答您的问题。