Уменьшить точность и масштаб десятичного типа данных и избежать арифметической ошибки переполнения

У меня есть поле в базе данных 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;
Другие вопросы по тегам