Hoy revisamos cómo vaciar una tabla de SQL Server cuando esta cuenta con restricciones (constraints).
Hoy revisamos cómo vaciar una tabla de SQL Server cuando esta cuenta con restricciones (constraints).

Problema: Vaciar una tabla con Constraints desde relaciones

El día de hoy, al preparar una base de datos para una prueba, me topé con el problema de vaciar y volver a llenar una tabla de SQL Server que cuenta con una columna autonumérica y que, además, es referenciada por otras dos tablas (constraints). Hacer un simple truncate o delete no funciona en estas circunstancias debido al CONSTRAINT que se origina por sus relaciones con las otras dos tablas, y que provoca un mensaje de error en cualquiera de estas dos operaciones.

Solución: Deshabilitar constraints

Como ya te imaginarás, la solución es sumamente sencilla (pero todo es difícil hasta que sabes como hacerlo).

Tuvimos que deshabilitar los constraints desde las otras tablas. Para ello bastó con correr la instrucción siguiente:

ALTER TABLE tablaB NOCHECK CONSTRAINT ALL;

Donde “tablaB”, obviamente, es el nombre de la tabla que referencía a la primera (que llamaremos tablaA). Ahora ya puedes vaciar la primera tabla con un delete.

Delete from tablaA;

Conviene resetear también el autonumérico:

DBCC CHECKIDENT ('tablaA',RESEED,0);

La tabla queda exactamente como si se le hubiera ejecutado una instrucción truncate table. Una vez hecho esto, ya tenemos la tablaA vacía, sin constraints que molesten, con el autonumérico (identity) reiniciado y podemos proceder con toda tranquilidad a poblarla. Eso sí, hay que recordar que cuando terminamos, debemos restaurar los constraints de la siguiente manera:

ALTER TABLE tablaB WITH CHECK CHECK CONSTRAINT ALL;

Sí, ya sé que la instrucción se ve rara. El “check check” no es un error de transcripción, así va la instrucción. Ahora ya realizamos toda la operación deseada. Vaciamos la tabla y la poblamos sin mayor problema con los constraints. Si la solución te sirvió, comenta. Y, claro está, que si conoces otra solución aún más sencilla y crees que puede beneficiarnos a todos pues no dejes de compartirla con nosotros.

DEJA UNA RESPUESTA

Please enter your comment!
Please enter your name here