1

我在 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 位的任何数字,然后转换列数据类型?

4

1 回答 1

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;
于 2013-04-16T15:03:28.223 回答