更改实时生产表上 varchar 的长度

ana*_*ocs 29 sql-server sql-server-2008-r2

我有一个 MS SQL Server 2008 R2 DB 服务器,目前正在与生产应用程序一起使用。

该应用程序的新增强功能现在需要varchar(100)增加表格中的列长度​​。

能否在不影响当前数据的情况下增加 prod DB 中此现有列的长度?

是否必须在非工作时间完成此更改以避免服务中断?

Mar*_*ith 46

如果您将其增加到varchar(100 - 8000)(即除 之外的任何内容varchar(max))并且您是通过 TSQL 而不是 SSMS GUI 执行此操作

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
Run Code Online (Sandbox Code Playgroud)

并且在某些情况下不会将列的可空性从NULLto NOT NULL(这将锁定表,同时验证所有行并可能写入)或 from NOT NULLtoNULL 在某些情况下,那么这只是一个快速的元数据更改。它可能需要等待SCH-M表上的锁定,但一旦获得,更改将几乎是即时的。

需要注意的一个警告是,在等待SCH-M锁定期间,其他查询被阻塞,而不是在它前面跳入队列,因此您可能需要考虑添加SET LOCK_TIMEOUT第一个。

还要确保在ALTER TABLE语句中明确指定NOT NULL这是否是原始列状态,否则该列将更改为 allow NULL