Отключение ограничений внешнего ключа с помощью инструкций INSERT и UPDATE

Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Analytics Platform System (PDW)

Ограничение внешнего ключа можно отключить во время транзакций INSERT и UPDATE в SQL Server с помощью SQL Server Management Studio или Transact-SQL. Используйте эту возможность, если новые данные не будут нарушать существующее ограничение или если ограничение относится только к данным, уже помещенным в базу данных.

ограничения

После отключения этих ограничений будущие вставки и обновления столбца не проверяются по проверочным ограничениям.

Разрешения

Требуется разрешение ALTER на таблицу.

Использование SQL Server Management Studio

Отключение ограничений внешнего ключа для инструкций INSERT и UPDATE

  1. Разверните в обозревателе объектовтаблицу с ограничением, затем разверните папку Ключи .

  2. Щелкните правой кнопкой мыши ограничение и выберите команду Изменить.

  3. В сетке под конструктором таблиц выберите Принудительное использование ограничения внешнего ключа и выберите значение Нет в раскрывающемся меню.

  4. Выберите Закрыть.

  5. Чтобы повторно включить ограничение при необходимости, выполните указанные выше шаги. Выберите Принудительное использование ограничения внешнего ключа и выберите значение Да в раскрывающемся меню.

  6. Чтобы доверять ограничению, проверив существующие данные в связи внешнего ключа, выберите "Проверить существующие данные о создании или повторном включении " и выберите "Да " в раскрывающемся меню. Это гарантирует, что ограничение внешнего ключа является доверенным.

  • Если для проверки существующих данных о создании или повторном включении задано значение "Нет", внешний ключ не проверяет существующие данные при повторном включении. Поэтому оптимизатор запросов не может рассмотреть потенциальные улучшения производительности. Доверенные внешние ключи рекомендуется использовать для упрощения планов выполнения с предположениями на основе ограничения внешнего ключа. Чтобы проверить, являются ли внешние ключи доверенными в базе данных, см. пример запроса далее в этой статье.

Использование Transact-SQL

Отключение ограничений внешнего ключа для инструкций INSERT и UPDATE

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  4. Чтобы повторно включить ограничение, скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  5. Убедитесь, что ограничение в вашей среде является доверенным и включенным. Если is_not_trusted = 1, внешний ключ не проверяет существующие данные при повторной или повторной создании. Поэтому оптимизатор запросов не может рассмотреть потенциальные улучшения производительности. Доверенные внешние ключи рекомендуется использовать для упрощения планов выполнения с предположениями на основе ограничения внешнего ключа. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.

    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
    

    Необходимо задать ограничение внешнего ключа доверенным, если существующие данные в таблице соответствуют ограничению внешнего ключа. Чтобы задать доверенный внешний ключ, используйте следующий сценарий, чтобы снова доверять ограничению внешнего ключа, отметив дополнительный WITH CHECK синтаксис. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.

    ALTER TABLE [Purchasing].[PurchaseOrderHeader] 
    WITH CHECK 
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;
    GO
    

Следующие шаги