Увеличьте точность денежного поля для огромной таблицы

У меня есть огромная таблица данных (более 200 миллионов записей), в которой хранятся денежные суммы, для которых мы используем тип данных Money. Мне нужно увеличить точность этого поля примерно до 8 знаков после запятой.

Теперь я мог просто пойти

ALTER TABLE CashTable ALTER COLUMN Cash decimal(23,8) null

Я хотел бы знать, если кто-нибудь знает, как это будет работать, и есть ли риск потери данных.

Спасибо


person Karl    schedule 08.02.2012    source источник
comment
Вам нужно сделать это онлайн или у вас есть окно обслуживания, в которое вы можете это сделать? Какова модель восстановления базы данных?   -  person Martin Smith    schedule 08.02.2012


Ответы (1)


За кулисами это добавит новый столбец фиксированной длины в каждую строку, поэтому, если вам нужно сделать это как онлайн-операцию, чтобы снизить накладные расходы на блокировку и уменьшить размер транзакции, на вашем месте я бы просто сделал это явно.

ALTER TABLE CashTable ADD COLUMN Cash2 decimal(23,8) null

Затем добавьте триггеры INSERT и UPDATE, чтобы Cash2 синхронизировался со столбцом Cash, и обновляйте новый столбец в пакетном режиме.

Когда вся таблица будет синхронизирована, удалите исходный столбец и переименуйте новый. Надеюсь, у вас нет кода, зависящего от порядка столбцов.

Риска потери данных нет, так как это может справиться с диапазоном money хорошо (с -922,337,203,685,477.5808 по 922,337,203,685,477.5807).

person Martin Smith    schedule 08.02.2012