Уменьшить точность и масштаб десятичного типа данных и избежать арифметической ошибки переполнения
У меня есть поле в базе данных 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 ответ
Сократить до 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;