patternsqlCritical
Change length of varchar on live prod table
Viewed 0 times
prodlengthvarcharlivechangetable
Problem
I have a MS SQL Server 2008 R2 DB server currently in use with a production app.
A new enhancement to the app now requires a
Can the length of this existing column in the prod DB be increased without affecting the current data?
Does this change have to be completed during off-hours to avoid disruption of service?
A new enhancement to the app now requires a
varchar(100) column in a table to be increased in length.Can the length of this existing column in the prod DB be increased without affecting the current data?
Does this change have to be completed during off-hours to avoid disruption of service?
Solution
If you are increasing it to
and not altering column nullability from
One caveat to be aware of is that during the wait for a
Also make sure in the
varchar(100 - 8000) (i.e. anything other than varchar(max)) and you are doing this through TSQL rather than the SSMS GUIALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULLand not altering column nullability from
NULL to NOT NULL (which would lock the table while all rows are validated and potentially written to) or from NOT NULL to NULL in some circumstances then this is a quick metadata only change. It might need to wait for a SCH-M lock on the table but once it acquires that the change will be pretty much instant.One caveat to be aware of is that during the wait for a
SCH-M lock other queries will be blocked rather than jump the queue ahead of it so you might want to consider adding a SET LOCK_TIMEOUT first.Also make sure in the
ALTER TABLE statement you explicitly specify NOT NULL if that is the original column state as otherwise the column will be changed to allow NULL.Code Snippets
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULLContext
StackExchange Database Administrators Q#15007, answer score: 51
Revisions (0)
No revisions yet.