Cambiar la longitud de varchar en la tabla de productos en vivo

25

Tengo un servidor MS SQL Server 2008 R2 DB actualmente en uso con una aplicación de producción.

Una nueva mejora de la aplicación ahora requiere una varchar(100)columna en una tabla para aumentar su longitud.

¿Se puede aumentar la longitud de esta columna existente en el DB prod sin afectar los datos actuales?

¿Este cambio tiene que completarse fuera del horario de atención para evitar la interrupción del servicio?

anataliocs
fuente

Respuestas:

42

Si lo está aumentando a varchar(100 - 8000)(es decir, cualquier otra cosa que no sea varchar(max)) y lo está haciendo a través de TSQL en lugar de la GUI de SSMS

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

y no altera la nulabilidad de la columna de NULLa NOT NULL(lo que bloquearía la tabla mientras todas las filas están validadas y potencialmente escritas ) o de NOT NULLa NULL en algunas circunstancias , este es un cambio rápido de metadatos solamente. Es posible que deba esperar un SCH-Mbloqueo en la mesa, pero una vez que adquiera que el cambio será prácticamente instantáneo.

Una advertencia a tener en cuenta es que durante la espera de un SCH-Mbloqueo, otras consultas se bloquearán en lugar de saltar la cola por delante, por lo que es posible que desee considerar agregar una SET LOCK_TIMEOUTprimera.

También asegúrese de que en la ALTER TABLEdeclaración especifique explícitamente NOT NULLsi ese es el estado original de la columna, ya que de lo contrario la columna se cambiará para permitir NULL.

Martin Smith
fuente
Gracias por la respuesta rápida, solo estaba comprobando. Fue casi instantáneo.
anataliocs