Отключение ограничений внешнего ключа с помощью инструкций 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
Разверните в обозревателе объектовтаблицу с ограничением, затем разверните папку Ключи .
Щелкните правой кнопкой мыши ограничение и выберите команду Изменить.
В сетке под конструктором таблиц выберите Принудительное использование ограничения внешнего ключа и выберите значение Нет в раскрывающемся меню.
Выберите Закрыть.
Чтобы повторно включить ограничение при необходимости, выполните указанные выше шаги. Выберите Принудительное использование ограничения внешнего ключа и выберите значение Да в раскрывающемся меню.
Чтобы доверять ограничению, проверив существующие данные в связи внешнего ключа, выберите Проверить существующие данные при создании или повторном включении и выберите Да в раскрывающемся меню. Это обеспечит доверие к ограничению внешнего ключа.
- Если параметр Проверить существующие данные при создании или повторном включении имеет значение Нет, внешний ключ не проверка существующие данные при повторном включении. Поэтому оптимизатор запросов не может учитывать потенциальные улучшения производительности. Рекомендуется использовать доверенные внешние ключи, так как их можно использовать для упрощения планов выполнения с помощью предположений, основанных на ограничении внешнего ключа. Чтобы проверка, являются ли внешние ключи доверенными в базе данных, см. пример запроса далее в этой статье.
Использование Transact-SQL
Отключение ограничений внешнего ключа для инструкций INSERT и UPDATE
В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine.
На стандартной панели выберите пункт Создать запрос.
Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2022; GO ALTER TABLE Purchasing.PurchaseOrderHeader NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO
Чтобы повторно включить ограничение, скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2022; GO ALTER TABLE Purchasing.PurchaseOrderHeader CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO
Убедитесь, что ограничение в вашей среде является доверенным и включенным. Если
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
Дальнейшие действия
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по