我有一个MS sql Server 2008 R2数据库服务器当前正在使用生产应用程序.
对应用程序的新增强现在要求表中的varchar(100)列的长度增加.
可以在不影响当前数据的情况下增加prod DB中现有列的长度吗?
是否必须在非工作时间内完成此更改以避免服务中断?
解决方法
如果你将它增加到varchar(100 – 8000)(即varchar(max)以外的任何东西)并且你是通过Tsql而不是SSMS GUI来实现的
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
并且不会将列的可空性从NULL更改为NOT NULL(在所有行被验证为and potentially written to时将锁定表)或从NOT NULL更改为NULL in some circumstances,这是仅快速元数据更改.可能需要等待桌面上的SCH-M锁定,但一旦获得该锁定,该更改将非常即时.
需要注意的一点是,在等待SCH-M锁定期间,其他查询将被阻止而不是在其前面跳过队列,因此您可能需要先考虑添加SET LOCK_TIMEOUT
.
还要确保在ALTER TABLE语句中显式指定NOT NULL(如果这是原始列状态),否则该列将更改为允许NULL.