我们的开发人员(在我成为 DBA 之前)将字段的数据类型设置为VARCHAR(MAX)
实际上只需要VARCHAR(255)
. 直到我们的表增长到超过几百万条记录和近 TB 的数据之后,才发现这一点。当我在该表上进入设计模式以在我们的测试环境中测试此更改时,我发现它创建的脚本会生成表的 _tmp 表副本,然后删除原始表并将 _tmp 重命名为原始表。我似乎记得学习这背后的原因与必须将数据从记录的“LOB”部分移动到记录的固定长度部分有关(或者我的记忆回忆起来)。但是,我找不到任何关于为什么会发生这种情况的文档(而不仅仅是更改大小)。有人可以指出我正确的方向,以便我可以更好地向管理层解释为什么现在在数百万个记录表上进行此更改将需要很长时间。
SSMS 生成的脚本并不是最好的。
您应该能够使用简单的
ALTER TABLE
:显然,请提前确保您存储在此列中的文本符合 255 个字符的限制。
我强烈建议先在测试环境中尝试一下,以了解需要多长时间。我不确定,它可能取决于您的服务器的版本和版本,但这种更改可能不会作为元数据更改执行,这意味着对于 TB 的数据将需要大量多少时间。
这个问题(为什么 ALTER COLUMN to NOT NULL 会导致大量日志文件增长?)有很多关于
ALTER COLUMN
.