You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MSSQL批量更新百万行时GETDATE()取值时机及替换为查询启动时间的方法

GETDATE() 批量更新时的时间取值逻辑

这个问题挺常见的,尤其是处理大表批量更新的时候,很容易纠结时间戳的一致性,我给你明确说清楚:

当你用 GETDATE() 更新数百万行数据时,它返回的是查询启动的时间,所有行的日期值会完全一致,不会出现毫秒级差异。

为什么会这样?因为SQL Server对 GETDATE() 这类系统函数的求值规则是:在单个查询的执行周期内,它只会被计算一次——就是查询开始执行的那一瞬间。之后不管更新操作要处理多少行、花多长时间,所有行的日期字段都会复用这个预先计算好的固定时间戳。哪怕你的更新跑了10秒才完成,每一行的日期都是同一个值。

确保用查询启动时间更新的小技巧

虽然 GETDATE() 本身已经满足需求,但如果是在一些逐行处理的场景(比如用游标循环更新),这时候每次调用 GETDATE() 会返回当前行的处理时间,这时候你可以提前把查询启动时间存到变量里,再用变量来更新:

-- 先把查询启动时间存入变量
DECLARE @BatchStartTime DATETIME = GETDATE();

-- 用变量批量更新所有行
UPDATE YourLargeTable
SET CurrentDateField = @BatchStartTime
WHERE YourFilterCondition;

这样不管处理多少行,所有行的时间戳都会完全统一,就是查询启动的那个时间点。

内容的提问来源于stack exchange,提问作者user1480192

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:42:38