首先,我已经解决了我遇到的实际问题,方法是使用 datetime2,并在 MICROSECOND 范围内进行 DATEDIFFing。但是我仍然对我所看到的行为感到惊讶,所以....
我正在尝试使用一些 SQL 来诊断性能问题,并且我有这样的循环代码来测试它:
DECLARE @timer datetime = NULL
DECLARE @diff int = 0
DECLARE @total int = 0
WHILE(<condition>)
BEGIN
SET @timer = SYSDATETIME()
<select statement under test>
SET @diff = DATEDIFF(MILLISECOND, @timer, SYSDATETIME())
SET @total = @total + @diff
END
SELECT @total
不过,我得到的是负总数!?
这到底是怎么回事?我会理解以@total = 0
; 这就是说增量小于 1 毫秒(或者足够接近计时器的分辨率报告,无论如何),所以我最终总结了很多 0。
但是 DATEDIFF 返回负数的可能性似乎很大!
我进一步检查并确认该@diff
变量确实正在返回-1
,甚至-2
.
是什么赋予了?