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

Применимо к: SQL Server 2016 (13.x) и более поздних версий Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)

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

ограничения

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

Permissions

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

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

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

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

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

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

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

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

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

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

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

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

  1. В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine.

  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
    

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

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

Дальнейшие действия