ALTER TABLE: cambiar una estructura que ya contiene datos

Las bases evolucionan: aparece un dato nuevo, cambia una longitud o necesitamos proteger una regla que antes solo vivía en la aplicación.

ALTER TABLE modifica la estructura existente. La dificultad no está únicamente en la sintaxis, sino en comprobar qué datos, dependencias y operaciones concurrentes serán afectados.

Agregar una columna

ALTER TABLE dbo.ProductoFavorito
ADD Comentario NVARCHAR(250) NULL;

Permitir NULL, la marca de un valor ausente o desconocido, hace posible agregar la columna aunque las filas existentes no tengan todavía un comentario.

Si una columna nueva debe ser obligatoria, necesitamos decidir qué valor recibirán las filas anteriores:

ALTER TABLE dbo.ProductoFavorito
ADD Activo BIT NOT NULL
    CONSTRAINT DF_ProductoFavorito_Activo DEFAULT 1
    WITH VALUES;

WITH VALUES aplica el valor predeterminado a las filas existentes en este escenario.

Cambiar una columna

ALTER TABLE dbo.ProductoFavorito
ALTER COLUMN Comentario NVARCHAR(500) NULL;

Ampliar una longitud suele ser más sencillo que reducirla. Antes de disminuirla debemos localizar valores que ya no cabrían y revisar índices —estructuras que organizan valores para facilitar el acceso— u objetos dependientes.

Agregar una restricción

La condición siguiente combina dos funciones de texto. TRIM retira los espacios de los extremos y LEN cuenta los caracteres restantes. Así, una cadena formada únicamente por espacios queda con longitud cero.

ALTER TABLE dbo.ProductoFavorito
ADD CONSTRAINT CK_ProductoFavorito_Comentario
CHECK (Comentario IS NULL OR LEN(TRIM(Comentario)) > 0);

Una restricción es una regla que la tabla hace cumplir. SQL Server valida las filas existentes al agregarla de esta forma. Si encuentra datos incompatibles, el cambio falla y debemos corregirlos antes, no desactivar la confianza de la restricción sin entender las consecuencias.

Eliminar una columna o restricción

ALTER TABLE dbo.ProductoFavorito
DROP CONSTRAINT CK_ProductoFavorito_Comentario;

ALTER TABLE dbo.ProductoFavorito
DROP COLUMN Comentario;

El orden importa: una restricción, índice o vista puede depender de la columna e impedir su eliminación.

Cambios sobre tablas grandes

Algunas modificaciones requieren explorar o reescribir gran parte de la tabla, mantienen bloqueos de esquema —protecciones sobre la definición del objeto— y consumen log de transacciones, donde SQL Server registra los cambios, o espacio adicional. Una sentencia breve puede convertirse en una operación larga.

Por eso probamos con un volumen representativo, medimos duración y planeamos compatibilidad entre la versión anterior y la nueva de la aplicación.

Qué conviene comprobar

Inventariamos procedimientos, vistas, funciones, índices, llaves, cargas y aplicaciones que utilizan la columna. También verificamos respaldo, ventana de despliegue, reversión —la forma de volver al estado anterior— y comportamiento durante ejecuciones concurrentes.

Renombrar una columna no actualiza de manera segura todos sus consumidores. A veces conviene introducir la nueva estructura, migrar consumidores y retirar la anterior en una versión posterior.

Relacionado con