在WHILE循环中使用GETDATE()始终返回相同的值

时间:2016-10-18 17:33:18

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

我理解from sources like this GETDATE()应始终(好吧,最终,取决于循环的速度)在循环中返回不同的值。

我有这个TSQL:

BubbleSort(elemType list[], int numvalues)

但它始终为DECLARE @WaitUntilTime DATETIME = DATEADD(SECOND, 10, GETDATE()) WHILE (DATEDIFF(SECOND, GETDATE(), @WaitUntilTime) > 0) BEGIN SELECT GETDATE(), @WaitUntilTime END 输出相同的值,并且循环永远不会像我想要的那样在10秒后结束。为什么呢?

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

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

1 个答案:

答案 0 :(得分:2)

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

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

延迟10秒后返回

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