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

SQL Server执行DATEADD(d, -100000, GETDATE())触发datetime溢出错误求助

你触发的报错中文翻译如下:

SQL错误:517 22007 [Microsoft][SQL Server Native Client 11.0][SQL Server] 向“datetime”列添加值导致溢出

问题根因

该报错和服务器iLo硬件无直接关联,核心触发逻辑是SQL Server的datetime数据类型仅支持 1753-01-01 至 9999-12-31 的日期范围:

  • 你当前使用的查询语句中调用DATEADD(d, -100000, GETDATE()),按当前日期计算,减去10万天(约274年)得到的日期早于1753年,超出datetime类型合法范围,触发溢出。
  • 无iLo的Gen2服务器可正常运行的常见原因有两类:要么该服务器上Ents表的LastActive字段类型为支持更早日期的datetime2,要么数据库兼容级别设置允许非法日期自动截断不抛出错误。

修复方案

你可任选以下一种方案修改查询语句即可解决问题,操作仅需要你执行SQL更新:

方案1:调整日期偏移量(推荐,适配现有字段类型)

将100000天的偏移量调整为60000天(约164年,计算后日期不会早于1753年),修改后的语句如下:

select dbo.ents.containerId
From dbo.Ents
Where LastActive > DATEADD(d, -60000, GETDATE ());

方案2:强制使用datetime2计算(适配大偏移量需求)

如果业务确实需要查询近270年以上的历史数据,将计算逻辑转换为datetime2类型即可避免溢出:

select dbo.ents.containerId
From dbo.Ents
Where LastActive > DATEADD(d, -100000, CAST(GETDATE() AS datetime2));

差异验证(可选)

如果需要确认两台服务器的配置差异,可执行以下语句查询字段类型:

SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Ents' AND COLUMN_NAME = 'LastActive';

如果Gen6服务器返回结果为datetime,Gen2服务器返回结果为datetime2,即可完全验证根因判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:24:04