向 'datetime' 列添加值导致溢出

Adding a value to a 'datetime' column caused an overflow

我在 DML 语句中交叉应用了一个 table 值函数,其中 returns 两列,其中一列是 RiskValue(这是一个表示扫描周期的整数) 现在,当我像这样打印值 RiskValue 和 dateadd 函数时(y 是函数别名,am 是另一个 table)

select cast(y.RiskValue as int),dateadd(m,cast(y.RiskValue as int),@RunningDate)
from .....

它给了我正确的值

6    |    'Some Date'

但是当我在 where 子句中使用它时

where am.DateOpen >= dateadd(m,cast(y.RiskValue as int),@RunningDate)

我收到错误:

Adding a value to a 'datetime' column caused an overflow

请注意,将硬编码值作为

where am.DateOpen >= dateadd(m,6,@RunningDate) 

工作正常。 (显然会)

有什么错误的建议吗?

张贴 Aaron Bertrand 的评论作为答案,以便解决此问题的人会发现它有帮助:

该行的 RiskValue 为 6,但您必须了解 SQL 服务器可能不会按照您编写语句的顺序优化语句。尝试对本应被过滤器排除的值执行计算时,它通常会出错,但计算是首先尝试的。我们可以试试

DATEADD(MONTH, CASE WHEN y.RiskValue < 20000 THEN y.RiskValue END, @RunningDate)

另请阅读 this and this 以更好地理解