在实时产品表上更改varchar的长度


25

我有一个与生产应用程序一起使用的MS SQL Server 2008 R2 DB服务器。

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

是否可以在不影响当前数据的情况下增加生产数据库中此现有列的长度?

是否必须在下班时间完成此更改,以避免服务中断?

Answers:


42

如果您将其增加到varchar(100 - 8000)(即以外的任何其他值varchar(max)),并且是通过TSQL而不是SSMS GUI进行的

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL

而不是从改变列的为空NULLNOT NULL(当所有行确认这将锁表和潜在的写入或) NOT NULLNULL 在某些情况下,那么这是一个快速的元数据,唯一的变化。它可能需要等待SCH-M表上的锁,但是一旦得知更改将立即生效。

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

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


感谢您的快速回答,只是检查。几乎是瞬间。
anataliocs,2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.