¿Cómo se pueden desactivar temporalmente las restricciones de clave externa mediante T-SQL?
¿Se pueden desactivar y activar las restricciones de clave foránea en SQL Server? ¿O mi única opción es abandonar
y luego crear
las restricciones?
804
3
Si quiere desactivar todas las restricciones de la base de datos, sólo tiene que ejecutar este código:
Para volver a activarlas, ejecute: (la impresión es opcional, por supuesto, y es sólo una lista de las tablas)
Lo encuentro útil cuando se rellenan los datos de una base de datos a otra. Es mucho mejor que soltar las restricciones. Como has mencionado, es muy útil cuando se eliminan todos los datos de la base de datos y se repoblan (por ejemplo, en un entorno de prueba).
Si está borrando todos los datos, puede encontrar esta solución útil.
También a veces es útil desactivar todos los triggers, puedes ver la solución completa aquí.
http://www.sqljunkies.com/WebLog/roman/archive/2005/01/30/7037.aspx
El estándar SQL-92 permite declarar un constaint como DEFERRABLE para que pueda ser diferido (implícita o explícitamente) dentro del ámbito de una transacción. Lamentablemente, SQL Server sigue sin tener esta funcionalidad de SQL-92.
Para mí, cambiar una restricción a NOCHECK es algo parecido a cambiar la estructura de la base de datos sobre la marcha -eliminar restricciones ciertamente lo es- y algo que debe evitarse (por ejemplo, los usuarios requieren mayores privilegios).