SQL Server中GETDATE()函数异常:返回固定过期时间求助
解决SQL Server 2019中GETDATE()返回固定滞后时间的问题
排查与修复步骤
1. 验证系统时间函数一致性
先排除函数本身被篡改的可能:
- 执行语句:
SELECT GETDATE(), SYSDATETIME(), SYSUTCDATETIME(); - 若三个函数返回相同的滞后时间,说明SQL Server的系统时间上下文存在异常;若仅
GETDATE()异常,检查是否存在同名自定义函数:SELECT * FROM sys.objects WHERE name = 'GETDATE' AND type = 'FN';,如果有,直接删除该自定义函数即可恢复系统函数功能。
2. 检查SQL Server的时间同步状态
SQL Server依赖主机时间,但服务账户可能存在同步异常:
- 先开启高级配置:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; - 启用
xp_cmdshell临时排查:EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; - 执行时间同步状态查询:
EXEC xp_cmdshell 'w32tm /query /status',确认服务账户下的时间是否与主机系统同步 - 若不同步,强制同步:
EXEC xp_cmdshell 'w32tm /resync' - 排查完成后关闭
xp_cmdshell:EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE;
3. 检查SQL Server服务账户权限
服务账户需具备读取系统时间的权限:
- 打开服务管理器,找到SQL Server服务,查看其登录账户
- 若使用自定义账户,需确保该账户拥有
SeSystemtimePrivilege权限(通过本地安全策略配置:本地策略→用户权限分配→更改系统时间);若为Local Service账户,默认已具备该权限,可跳过此步
4. 排除客户端或会话异常
- 关闭当前Azure Data Studio查询窗口,重新打开后执行
SELECT GETDATE();,排除会话级别的时间上下文修改 - 使用SSMS(SQL Server Management Studio)执行相同查询,对比结果,确认是否为Azure Data Studio客户端缓存问题
- 若怀疑客户端缓存,可清空Azure Data Studio缓存(路径为
%APPDATA%\azuredatastudio下的缓存文件夹)后重新连接
5. 检查数据库状态
- 执行
SELECT name, is_read_only FROM sys.databases WHERE name = '你的数据库名';,确认数据库是否处于只读状态(虽然GETDATE()通常不受只读影响,但需排除极端场景)
内容的提问来源于stack exchange,提问作者KRISTIJAN TOMASINI
相关产品推荐
相关产品推荐

