Ir al contenido principal

HABILITAR Y DESHABILITAR CONSTRAINTS

Para modificar la estructura de una base de datos de Microsoft SQL Server, puede ser necesario desactivar temporalmente las constraints que tenga. Por ejemplo, para vaciar los datos de una base de datos, sin tener que pensar el orden correcto para que no salten las restricciones si tenemos ya claro que queremos vaciarla entera.

Nota: Se aplica a partir de la versión 2016


En SQL Server podemos desactivarlas de una en una, o bien deshabilitar constraints con una instrucción todas las de una tabla.
-- Para deshabilitar una única constraint
ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

-- Para habilitar una única constraint
ALTER TABLE MyTable CHECK CONSTRAINT MyConstraint

-- Para deshabilitar todas las constraints de una tabla
ALTER TABLE MyTable NOCHECK CONSTRAINT ALL

-- Para desabilitar todos los constraint de una tabla
ALTER TABLE MyTable CHECK CONSTRAINT ALL

Recuerda que, si has cambiado datos de la tabla, al volver a habilitar las constraints, estos nuevos datos deben cumplirla, sino dará error y no podrás volver a habilitarla si no lo arreglas.

Nota: No se puede deshabilitar el PK de una tabla.

Mensaje de error que no está permitido deshabilitar el constraint de la PK



Importante:
Puede deshabilitar una restricción de clave externa durante las transacciones de INSERTAR y ACTUALIZAR en SQL Server 2017 utilizando SQL Server Management Studio o Transact-SQL. Utilice esta opción si sabe que los nuevos datos no violarán la restricción existente o si la restricción se aplica solo a los datos que ya están en la base de datos.

Limitaciones:
Después de deshabilitar estas restricciones, las futuras inserciones o actualizaciones de la columna no se validarán con respecto a las condiciones de restricción.

Referencia: @ldomar.mc
https://zeytol.com

Comentarios

Entradas populares de este blog

DELETE VS TRUNCATE

El comando TRUNCATE, lo que hace es desasociar las páginas de datos de la tabla, sin alterar los registros en sí mismo, mientras que el DELETE recorre cada uno de los registros y los marca como borrados, por lo tanto, hace muchas más operaciones de I/O, que aumenta exponencialmente en relación con TRUNCATE, a medida que aumenta el tamaño de la tabla. Cuando trabajamos con tablas que tienen millones de registros nos preguntamos si debemos utilizar DELETE o TRUNCATE, ¿cuál es más óptimo? referente al rendimiento de nuestro servidor, ¿es posible revertir la operación si comenzamos una transacción?, descubramos en el siguiente caso: Caso práctico En primer lugar crearemos una tabla e insertamos datos de prueba. -- Creamos la tabla CREATE TABLE Employee (        Empid int NOT NULL,        Name nchar ( 10 ) NULL,        City nchar ( 10 ) NULL ) ON [PRIMARY] GO -- Inserta...

COLUMNA CALCULADA

Una columna calculada es una columna virtual que no se almacena físicamente en la tabla, a menos que la columna esté marcada como PERSISTA. Una expresión de columna calculada puede usar datos de otras columnas para calcular un valor para la columna a la que pertenece.  Limitaciones: Una columna calculada no se puede usar como una definición de restricción DEFAULT o FOREIGN KEY o con una definición de restricción NOT NULL. Sin embargo, si el valor de la columna calculada se define mediante una expresión determinista y el tipo de datos del resultado está permitido en las columnas de índice, una columna calculada puede usarse como una columna clave en un índice o como parte de cualquier restricción PRIMARY KEY o UNIQUE. Por ejemplo, si la tabla tiene columnas enteras a y b, la columna calculada a + b puede indexarse, pero la columna calculada a + DATEPART (dd, GETDATE ()) no puede indexarse, porque el valor puede cambiar en invocaciones posteriores. ...