SQL Server将字段类型从数字更改为int

问题描述:

我需要将表的字段从Numeric(5,10)更改为intSQL Server将字段类型从数字更改为int

此字段是主键并与20多个其他表(某些表具有超过数百万条记录)相关。

有人可以知道最简单和最安全的方式来改变字段类型吗?

我试图改变它从SQL Server Studio管理,但我关心的 表将被丢弃并重新创建,这会减慢进程,甚至当我试图给出超时错误, 有人可以有经验在最好的办法意见... 问候

+0

看看这个http://dba.stackexchange.com/questions/82233/update-datatype-of-primary-key-without-deleting-the-table-sql-server – user1666620

+0

也许也想看看这个如果你需要增加SSMS超时时间:http://*.com/questions/1137190/changing-the-commandtimeout-in-sql-management-studio –

我将进行如下:

  1. 丢弃所有的FKS引用当前PK列
  2. 创建新的int列可为空
  3. 填充所有行的新列,所以它是独一无二的
  4. 使新列非空
  5. 除去现有PK和列
  6. (可选)重命名新列
  7. 添加新PK
  8. 对于每个FK你掉
    • 执行类似的变换,切换到int列
    • 创建新的FK
  9. 更新所有的存储过程,触发器在,...
  10. 更新使用表
  11. 更新任何报告,SSIS,...利用表

(即任何应用程序。潜在的这是很多工作:因此遗留数据库往往有这样的事情留在原地。)

所有这些都可以脚本化,这将最大限度地减少停机时间。

注意:如果您有DBA,那么这是与DBA合作的好时机。他们可能有兴趣确保任何这种变化尽可能平稳和尽可能快(例如,分配额外的临时空间以确保添加新的集群PK不会导致问题)。