在 WHILE 循环中使用 GETDATE() 总是 returns 相同的值

Using GETDATE() in a WHILE loop always returns the same value

我理解 from sources like this that GETDATE() 应该总是(嗯,最终,取决于循环的速度)return 循环中的不同值。

我有这个 TSQL:

DECLARE @WaitUntilTime DATETIME = DATEADD(SECOND, 10, GETDATE())

WHILE (DATEDIFF(SECOND, GETDATE(), @WaitUntilTime) > 0)
BEGIN
    SELECT GETDATE(), @WaitUntilTime
END

但它始终为 GETDATE() 输出相同的值,并且循环永远不会像我希望的那样在 10 秒后结束。为什么?

我还发现 this answer 这听起来像是一个类似的案例,但它谈到 GETDATE()SELECT 查询中对列进行一次评估。我不知道这是否也适用于 while 循环。

顺便说一下,我知道 WAITFOR 但我不能使用它,因为我想在单个批次中引入延迟。

DECLARE @WaitUntilTime DATETIME = DATEADD(SECOND, 10, GETDATE())
DECLARE @Dummy int

WHILE (DATEDIFF(SECOND, GetDate(), @WaitUntilTime ) > 0)
BEGIN
    Set @Dummy=1
END
SELECT GetDate(), @WaitUntilTime 

Returns 延迟 10 秒后

(No column name)        (No column name)
2016-10-18 13:53:20.000 2016-10-18 13:53:20.140