【发布时间】:2021-12-14 23:59:03
【问题描述】:
除了明显可能的数据丢失之外,将大小从varchar(MAX) 更改为varchar(255) 时,是否有任何副作用?喜欢:
- 表锁?
- 索引损坏?
- 自动重新索引?
这种活动可以在一天中的任何时间进行,还是应该限制在“维护窗口”内?
【问题讨论】:
-
动作本身是无害的。我无法想象要花很长时间才能使一个字段变得更小。所以它随时都可以实现。
-
视情况而定。您可以根据您的 SQL Server 版本指定 ONLINE = ON,这会改变行为,并且还希望确保您不会从 NULL 变为 NOT NULL。一些路径会导致数据操作的大小,这意味着大量的日志活动、阻塞等。我相当肯定 SQL Server 将不得不验证没有数据 > 新大小。在某些情况下,创建新列、批量复制数据、删除旧列、重命名新列可能更有效。这当然是破坏性的。
-
您在开发环境中测试时发现了什么?
-
没有明显可能的数据丢失。在截断的情况下整个操作会失败。索引损坏只会由于硬件问题或 SQL 错误而发生。
标签: sql sql-server alter-table alter-column