smalldatetime 的算术溢出错误

Arithmetic overflow error for smalldatetime

COUNT(DISTINCT CASE WHEN DATEDIFF(d, ClientVisit.rev_timeout, ClientVisit.signature_datetime) = 3  THEN
   CASE WHEN ClientVisit.multiple_flag = 1 
        THEN ClientVisit.rev_timein 
        ELSE ClientVisit.clientvisit_id END 
      END

数据类型

错误

Arithmetic overflow error converting expression to data type smalldatetime

SQL 服务器正在将 clientvisit_id 转换为 smalldatetime 我不知道为什么,因为我在这里没有看到与另一个日期时间的比较。 DATEDIFF returns a 3时只是一个计数增量。有人可以解释为什么会发生这种情况并提供解决方案吗?

T-SQL 中的

CASE 是一个 表达式 ,最终 return 是一个单一的原子值。因此,CASE 表达式的所有部分 应该 return 相同的数据类型。

这里不是这种情况!内层CASEreturns

THEN ClientVisit.rev_timein 

数据类型为smalldatetime,而ELSE部分:

ELSE ClientVisit.clientvisit_id 

returns 数据类型的值 int.

T-SQL 将尝试转换这些值 according to this data type precedence 列表,因此尝试将 int 转换为 smalldatetime 并失败。

要学什么CASE是一个表达式,它应该return 来自所有 THENELSE 分支的相同数据类型 ...