提高金钱领域的精确度为巨大的桌子

时间:2012-02-08 12:06:09

标签: sql sql-server-2008 decimal currency sqldatatypes

我有一个巨大的数据表(2亿多条记录),用于存储我们使用Money数据类型的现金金额。我需要将此字段的精度提高到8个左右的小数点。

现在我可以简单地去

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

我想知道是否有人知道这将如何执行,以及是否存在丢失数据的风险。

由于

1 个答案:

答案 0 :(得分:1)

在幕后,这将为每一行添加一个新的固定长度列,所以如果你需要这样做一个在线操作,以保持锁定开销,并减少交易规模,如果我是你,我会做明确地说。

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

然后添加INSERTUPDATE触发器以使Cash2Cash列保持同步,并批量更新新列。

当整个表同步时,删除原始列并重命名新列。希望您没有任何依赖于列顺序的代码。

没有数据丢失的风险,因为这可以应对money罚款(-922,337,203,685,477.5808922,337,203,685,477.5807)的范围。