【问题标题】:SQL Server - Alter column length causes collateral damage?SQL Server - 更改列长度会导致附带损害?
【发布时间】: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


【解决方案1】:

在将 varchar(max) 列更改为 varchar(n) 或反之亦然时,SQL Server 将更新表的所有行。这可以暂时增加表的大小,直到重建集群索引或执行DBCC CLEANTABLE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2012-02-03
    相关资源
    最近更新 更多