我有大约10个表,其中包含数据。我需要将数据类型 bigint 的字段更改为数字(18,0)。
我们在数据库中验证了数据,不会有任何数据丢失。在我们较低的环境中,我们所做的是:
以上是我们在较低环境中遵循的流程。
但是,当涉及刺激时,我们不能遵循上述程序。我们想使用ALTER语句进行更改。由于它是PROD环境,我们必须小心改变。正如我之前所说,不会有任何数据丢失。
但是仍然想知道 - 当我们执行ALTER
语句时,内部会发生什么?
它会丢弃表格并使用新定义重新创建并填充数据吗?如果是这样,是否存在与此相关的风险?
对于如何在PROD中正确处理这些问题的任何想法都将不胜感激。
答案 0 :(得分:1)
我可能会建议一种不重建数据的方法。请改用计算列。像这样:
sp_rename 'table.dbo.col', '_col', 'COLUMN';
alter table table add col as (cast(_col as numeric(18, 0));
然后,您可以访问col
作为您想要的类型。您不必重写任何数据,因此不会出现任何锁定或其他性能问题。当然,select *
会有点多余,但无论如何你可能不应该这样做。