Deshabilitar restricciones de clave externa con instrucciones INSERT y UPDATE

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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.

Use SQL Server Management Studio

Para deshabilitar una restricción FOREIGN KEY de instrucciones INSERT y UPDATE

  1. En el Explorador de objetos, expanda la tabla que contiene la restricción y, a continuación, expanda la carpeta Claves .

  2. Haga clic con el botón derecho en la restricción y seleccione Modificar.

  3. 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.

  4. Seleccione Cerrar.

  5. Para volver a habilitar la restricción cuando quiera, invierta los pasos anteriores. Seleccione Aplicar restricción de clave externa y después en el menú desplegable.

  6. 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 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

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos.

  2. En la barra Estándar, seleccione Nueva consulta.

  3. 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  
    
  4. 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  
    
  5. 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
    

Pasos siguientes