Deshabilitar restricciones de clave externa con instrucciones INSERT y UPDATE
Se aplica a: SQL Server 2016 (13.x) y versiones posteriores
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Puede deshabilitar una restricción de clave externa durante las transacciones INSERT y UPDATE en SQL Server mediante SQL Server Management Studio o Transact-SQL. Use esta opción si sabe que los nuevos datos no infringirán la restricción existente o si la restricción solo se aplica a los datos que ya están en la base de datos.
Limitaciones y restricciones
Después de deshabilitar estas restricciones, las posteriores inserciones o actualizaciones de la columna no se validan con las condiciones de la restricción.
Permisos
Requiere el permiso ALTER en la tabla.
Uso de SQL Server Management Studio
Para deshabilitar una restricción FOREIGN KEY de instrucciones INSERT y UPDATE
En el Explorador de objetos, expanda la tabla que contiene la restricción y, a continuación, expanda la carpeta Claves .
Haga clic con el botón derecho en la restricción y seleccione Modificar.
En la cuadrícula situada debajo de Diseñador de tablas, seleccione Exigir restricción de clave externa y después No en el menú desplegable.
Seleccione Close (Cerrar).
Para volver a habilitar la restricción cuando quiera, invierta los pasos anteriores. Seleccione Aplicar restricción de clave externa y después Sí en el menú desplegable.
Para confiar en la restricción mediante la comprobación de los datos existentes en la relación de la clave externa, seleccione Comprobar datos existentes al crear o al habilitar de nuevo y seleccione Sí en el menú desplegable. Esto garantizaría que la restricción de clave externa sea de confianza.
- Si Comprobar datos existentes al crear o al habilitar de nuevo está establecido en No, la clave externa no comprueba los datos existentes cuando se vuelve a habilitar. Por lo tanto, el optimizador de consultas no puede considerar posibles mejoras de rendimiento. Se recomiendan las claves externas de confianza porque se pueden usar para simplificar los planes de ejecución con suposiciones basadas en la restricción de clave externa. Para comprobar si las claves externas son de confianza en la base de datos, vea una consulta de ejemplo más adelante en este artículo.
Uso de Transact-SQL
Para deshabilitar una restricción FOREIGN KEY de instrucciones INSERT y UPDATE
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos.
En la barra Estándar, seleccione Nueva consulta.
Copie y pegue el ejemplo siguiente en la ventana de consulta y seleccione Ejecutar.
USE AdventureWorks2022; GO ALTER TABLE Purchasing.PurchaseOrderHeader NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO
Para volver a habilitar la restricción, copie y pegue el ejemplo siguiente en la ventana de consulta y seleccione Ejecutar.
USE AdventureWorks2022; GO ALTER TABLE Purchasing.PurchaseOrderHeader CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO
Compruebe que la restricción del entorno sea de confianza y esté habilitada. Si
is_not_trusted
es = 1, la clave externa no comprueba los datos existentes cuando se vuelve a habilitar o crear. Por lo tanto, el optimizador de consultas no puede considerar posibles mejoras de rendimiento. Se recomiendan las claves externas de confianza porque se pueden usar para simplificar los planes de ejecución con suposiciones basadas en la restricción de clave externa. Copie y pegue el ejemplo siguiente en la ventana de consulta y seleccione Ejecutar.SELECT o.name, fk.name, fk.is_not_trusted, fk.is_disabled FROM sys.foreign_keys AS fk INNER JOIN sys.objects AS o ON fk.parent_object_id = o.object_id WHERE fk.name = 'FK_PurchaseOrderHeader_Employee_EmployeeID'; GO
Debe establecer la restricción de clave externa como de confianza si los datos existentes de la tabla cumplen con la restricción de clave externa. Para establecer la clave externa como de confianza, use el siguiente script para volver a confiar en la restricción de clave externa, teniendo en cuenta la sintaxis
WITH CHECK
adicional. Copie y pegue el ejemplo siguiente en la ventana de consulta y seleccione Ejecutar.ALTER TABLE [Purchasing].[PurchaseOrderHeader] WITH CHECK CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO