Увеличьте точность на денежном поле для огромного стола - PullRequest
2 голосов
/ 08 февраля 2012

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

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

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

Хотелось бы узнать, есть ли у кого-нибудь представление о том, как это будет работать, и существует ли риск потери данных.

Спасибо

1 Ответ

1 голос
/ 08 февраля 2012

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

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).

...