即使在查看许多主题之后,我也未能解决此问题。
我有一个十进制列(8,4)和一个包含4个案例的数据表,它们是行的方式并超过上限。没关系。我有一个导入脚本,性能没有问题,最多使用20次。
我试图以多种方式处理问题,例如(此代码是SELECT语句的一部分):
CASE WHEN PRT.InputColumn > 999 THEN 999.9999 ELSE PRT.InputColumn END as MyColumn
但显然,服务器在评估WHEN语句时会以十进制(8,4)进行思考,并且无论如何都会抛出错误。好的,我认为这可以解决问题:
CASE WHEN TRY_CONVERT(decimal(12,4), PRT.InputColumn) IS NULL THEN 999.9999 ELSE PRT.InputColumn END as MyColumn
但是,我仍然得到同样的错误:
Arithmetic overflow error converting numeric to data type numeric.
所以我的意思是保持columnd数据类型不变并处理过多的值。 处理溢出值的正确方法是什么?
答案 0 :(得分:0)
当你TRY_CONVERT到DECIMAL(12,4)时,你可能得到比9999更大的值,当然它们不适合DECIMAL(8,4)。
只需切换到8,4:
CASE WHEN TRY_CONVERT(decimal(8,4), PRT.InputColumn) IS NULL
THEN 9999.9999
ELSE PRT.InputColumn
END as MyColumn
或更短:
COALESCE(TRY_CONVERT(decimal(8,4), PRT.InputColumn), 9999.9999)
注意,两者都会将大的否定值转换为9999.9999
。