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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *