我在SQL Server 2012数据库中有一个字段,目前是十进制(30,20),因为这是数据提供程序的格式。然而,这么大的小数是完全没有必要的,考虑到这个表有数百万行,我们希望将其缩减为decimal(16,7)之类的小数。
我尝试了以下SQL:
alter table mytable alter column mycolumn decimal(16,7)
但是这会导致错误:
Arithmetic overflow error converting numeric to data type numeric.
改变这个字段的最好方法是什么?显然,我意识到发生错误是因为列中的值超过了新的精度。我想知道的是,如果有一个脚本,可以切断任何数字超过小数点第7,然后转换列数据类型?
降为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;