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

标签 sql-server sql-server-2008

我们有一个包含 7.7 亿行和更改的生产表。我们想要(/需要?)将 Primary ID 列从 int 更改为 bigint 以允许 future 增长(并避免 32 位整数空间耗尽时突然停止)

DEV 中的实验表明,这并不像更改列那么简单,因为我们需要删除索引然后重新创建它。到目前为止,DEV(比 PROD 稍微谦虚一点)的指数下降在 1 个半小时后还没有结束。此表 24/7 不间断运行,长时间离线是不可能的。

有其他人遇到过类似的情况吗?你是怎么完成的?

还有其他选择吗?

编辑:附加信息:

  • 主键是聚集的。

最佳答案

您可以尝试分阶段的方法。

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

您最终应该将痛苦分散到这 7 个步骤中,而不是一次性解决所有问题。

关于sql-server - 在Sql Server中将int主键转换为bigint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5461205/

相关文章:

SQL 表 - 根据条件合并行

sql-server - 如何在脚本内设置 SQL Server 脚本的超时?

sql-server - 如何在报告服务的列组中添加 "missing"列?

Sql Server 2008 更新查询花费了太多时间

sql-server - 如何在行的列中插入当前日期

sql-server-2008 - 我可以用什么来代替 sql 函数中的 #Temp 表

asp.net - 在哪里可以获得用于 SQL Server 的简单时区表?

sql - "Adding"GROUP BY 's and ORDER BY' 在一个查询中而不是单独的

c# - 部署自定义 SSIS 2012 组件

sql - 将节点插入到 SQL 2008 xml 数据类型中...首先检查它是否存在