在 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
我理解 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