增加大表中的列长度

时间:2014-01-23 18:43:43

标签: sql sql-server

我们的生产服务器是sql server 2005,我们有一个非常大的表,有1.03亿条记录。我们希望将一个特定字段的长度从varchar(20)增加到varchar(30)。虽然我说它只是元数据的变化,因为它增加了列长度,我的经理说他不想改变这么大的表。 pl建议最好的选择。我正在考虑创建一个新列并使用旧列值更新新列。

我查看了许多博客,他们说改变会影响,有些人说它不会影响。

2 个答案:

答案 0 :(得分:1)

如你所说,这是一个仅限元数据的操作,这是要走的路。通过测试你是对的,向你的经理(以及你自己!)证明。

答案 1 :(得分:1)

您应首先测试任何建议,除非从可能实际知道所发生情况的详细信息的SQL Server MVP中。

但是,将varchar长度从20更改为30不会影响表中任何现有数据的布局。也就是说,两个变量的布局完全相同。这意味着当您更改表时,数据不会具有更改。

这提供了乐观的看法,即改变将是“容易的”。

数据页面确实包含有关类型的一些信息 - 至少是记录中类型的长度。我不知道这是否包括字符类型的最大长度。可能需要更改数据页。

这有点悲观。

几乎任何其他更改都需要更改每个记录和/或数据页面。例如,从int更改为bigint正在从4字节字段移动到8字节字段。 所有记录受数据布局更改的影响。大变革。

varchar()更改为nvarchar()char()会产生同样的影响。

另一方面,将字段从NULLABLE更改为NOT NULLABLE(反之亦然)不会影响每页上的记录存储。但是,该信息存储在NULLABLE标志数组中的页面上,因此需要更新所有页面。

因此,有可能更改不会导致任何数据被重写。但是在较小的桌子上进行测试,看看会发生什么。