在sql server

时间:2015-05-19 10:05:36

标签: sql sql-server-2008 alter

我有大约10个表,其中包含数据。我需要将数据类型 bigint 的字段更改为数字(18,0)。

我们在数据库中验证了数据,不会有任何数据丢失。在我们较低的环境中,我们所做的是:

  1. 为现有表格进行备份,暂时重命名
  2. 使用数值数据类型
  3. 创建新表
  4. 从备份表填充数据
  5. 如果一切正常,请删除备份表
  6. 以上是我们在较低环境中遵循的流程。

    但是,当涉及刺激时,我们不能遵循上述程序。我们想使用ALTER语句进行更改。由于它是PROD环境,我们必须小心改变。正如我之前所说,不会有任何数据丢失。

    但是仍然想知道 - 当我们执行ALTER语句时,内部会发生什么?

    它会丢弃表格并使用新定义重新创建并填充数据吗?如果是这样,是否存在与此相关的风险?

    对于如何在PROD中正确处理这些问题的任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我可能会建议一种不重建数据的方法。请改用计算列。像这样:

sp_rename 'table.dbo.col', '_col', 'COLUMN';

alter table table add col as (cast(_col as numeric(18, 0));

然后,您可以访问col作为您想要的类型。您不必重写任何数据,因此不会出现任何锁定或其他性能问题。当然,select *会有点多余,但无论如何你可能不应该这样做。