在Sql Server中将int主键转换为bigint

My *_* Me 11 sql-server sql-server-2008

我们有一个生产表,有7.7亿行和变化.我们希望(/需要?)将主ID列从int更改为bigint以允许将来增长(并避免在32位整数空间耗尽时突然停止)

DEV中的实验表明,这并不像改变列那么简单,因为我们需要删除索引然后重新创建它.到目前为止DEV(比PROD略显谦逊)指数的下降还没有在1个半小时后完成.这个表每周7天,每天24小时播放,让它离线这么长时间不是一个选择.

有没有其他人不得不处理类似的情况?你是怎么做到的?

还有替代品吗?

编辑:附加信息:

  • 主键是群集.

小智 12

你可以尝试一种分阶段的方法.

  1. 创建一个新的bigint列
  2. 创建插入触发器以使新条目与2列保持同步
  3. 执行更新以使用转换后的值填充bigint列中的所有空值
  4. 将表上的主索引从旧id列更改为新列
  5. 指向任何FK和查询以使用新列
  6. 将新列更改为您的标识列,并从#2中删除插入触发器
  7. 删除旧ID列

你最终应该在这7个步骤中分散痛苦,而不是一次性击中它们.


Bet*_*eth 1

为新行创建一个具有较长数据类型的并行表并对结果进行 UNION 操作?