将值添加到'datetime'列会导致溢出

时间:2015-05-16 10:47:06

标签: sql-server-2012 dateadd

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

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)

我收到错误:

  

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

请注意,将硬编码值传递为

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

工作正常。 (显然它会)

有什么建议可能出错吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

另请阅读thisthis以获得更好的理解