GetDate()在过程中的不同点返回相同的时间

时间:2016-06-30 00:31:00

标签: sql-server sql-server-2008 datetime

我不确定我在这里缺少什么,但是当我在SQL Server 2008 SSMS会话中执行类似的操作时:

declare @start datetime
declare @end datetime

set @start = GetDate()

Update blah blah...a huge amount of rows...;

set @end = GetDate()

当我尝试datediff@start之间的@end秒时,我得到零。

所以我打印了@start@end,它们是相同的。该查询花了几分钟。这是怎么回事?

编辑 - 问题是Set @start和Set @end在光标打开/关闭块内(但不在fetch循环内),显然MS将这些视为同一时间。

谢谢, 吉姆

1 个答案:

答案 0 :(得分:0)

您可以发现四个特定用例,Datetime2和SYSDATETIME()将为您提供更高的精度。然后,您可以使用nanoseconds datediff运算符。

顺便说一句,你应该假设在更新过程中UPDATE myDate = GETDATE()WHERE“大量记录”和UPDATE myDatefield = SYSDATETIME()总是会给你不同的日期值,取决于你的月亮的阶段和芝加哥熊队最后一场比赛的得分。

这是因为GETDATE()在SQL服务器的两个不同级别上不具有确定性。