我有一个巨大的数据表(2亿多条记录),用于存储我们使用Money数据类型的现金金额。我需要将此字段的精度提高到8个左右的小数点。
现在我可以简单地去
ALTER TABLE CashTable ALTER COLUMN Cash decimal(23,8) null
我想知道是否有人知道这将如何执行,以及是否存在丢失数据的风险。
由于
答案 0 :(得分: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
)的范围。