Tengo un servidor de base de datos MS SQL Server 2008 R2 actualmente en uso con una aplicación de producción.
Una nueva mejora de la aplicación ahora requiere que una varchar(100)
columna en una tabla se incremente en longitud.
¿Puede la longitud de esta columna existente en el prod DB sin afectar los datos actuales?
¿Es necesario realizar este cambio fuera del horario laboral para evitar la interrupción del servicio?
Responder
Si lo aumenta a varchar(100 - 8000)
(es decir, cualquier 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 sin alterar la posibilidad de nulidad de columnas de NULL
a NOT NULL
( que bloquearía la tabla mientras todas las filas están validadas y potencialmente escritas en ) o desde NOT NULL
a NULL
en algunas circunstancias , entonces este es un cambio rápido de solo metadatos. Es posible que deba esperar a que se produzca un bloqueo SCH-M
en la tabla, pero una vez que lo adquiera, el cambio será prácticamente instantáneo.
Una advertencia a tener en cuenta es que durante la espera de un SCH-M
bloquear otras consultas serán bloqueadas en lugar de saltar la cola por delante, por lo que es posible que desee considerar agregar un SET LOCK_TIMEOUT
primero.
También asegúrese de que el ALTER TABLE
declaración especifica explícitamente NOT NULL
si ese es el estado original de la columna, de lo contrario, la columna se cambiará para permitir NULL
.