减少十进制数据类型精度&缩放并避免算术溢出错误

时间:2013-04-16 14:57:29

标签: sql sql-server sql-server-2012 alter-table alter-column

我在SQL Server 2012数据库中有一个当前为十进制(30,20)的字段,因为这是数据提供程序的格式。然而,考虑到这个表有数百万行,那么大小的十进制是完全没必要的,并且想把它修剪成十进制(16,7)。

我尝试了以下SQL:

alter table mytable alter column mycolumn decimal(16,7)

但是这导致了错误:

Arithmetic overflow error converting numeric to data type numeric.

更改此字段的最佳方法是什么?我显然意识到错误正在发生,因为列中的值超过了新的精度。我想知道的是,是否有一个脚本可以切断超过第7个小数点的任何数字,然后转换列数据类型?

1 个答案:

答案 0 :(得分:0)

减少到7位小数:

update mytable set newcolumn = convert(decimal(16, 7), mycolumn);

update mytable set mycolumn = null;

commit;

alter table mytable alter column mycolumn decimal(16,7)

update mytable set mycolumn = newcolumn;

commit;

alter table mytable drop column newcolumn;