Можете да използвате кода по-долу, за да деактивирате всички CHECK
и ограничения на външния ключ за текущата база данни в SQL Server.
EXEC sp_MSforeachtable @command1="ПРОМЕНЯ ТАБЛИЦА ? NOCHECK ОГРАНИЧЕНИЕ ВСИЧКИ"
Това използва недокументирания sp_MSforeachtable
на Microsoft съхранена процедура. Тази процедура ви позволява да изпълнявате задачи срещу всяка таблица в база данни. Така че е идеално за нашата задача тук – да деактивираме всички CHECK
ограничения в текущата база данни.
По-долу е даден пример, където правя това и след това проверявам резултата.
Пример 1 – Преглед на ограниченията
Първо, ще разгледам набързо текущата CHECK
и ограничения на външния ключ в базата данни, за да видите дали са активирани или деактивирани.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trustedFROM> s_not_trustedFROM>Резултат:
+----------------+----------------+----------- ----+-----------------+| Таблица | Ограничение | е_забранено | е_не_доверен ||----------------+----------------+------------ ---+------------------|| ConstraintTest | chkPrice | 0 | 0 || ConstraintTest | chkValidEndDate | 0 | 0 || ConstraintTest | chkTeamSize | 0 | 0 || Професия | chkJobTitle | 0 | 0 |+----------------+----------------+----------- ---+------------------+Така че в момента има четири
CHECK
ограничения в базата данни, за две различни таблици.Можем да видим, че всички ограничения са активирани, защото is_disabled е настроен на 0 .
Пример 2 – Деактивиране на ограниченията
Сега ще деактивирам всички ограничения:
EXEC sp_MSforeachtable @command1="ПРОМЕНЯ ТАБЛИЦА ? NOCHECK ОГРАНИЧЕНИЕ ВСИЧКИ"Обикновено е добра идея да се уверите, че използвате правилната база данни, когато правите неща като това. Така че можем да добавим към горния код чрез изрично превключване към правилната база данни:
ИЗПОЛЗВАЙТЕ тест;EXEC sp_MSforeachtable @command1="ПРОМЕНЯ ТАБЛИЦА ? НЕ ПРОВЕРЯТЕ ОГРАНИЧЕНИЕ ВСИЧКИ"В този случай преминавам към база данни, наречена Test .
Пример 3 – Проверете резултата
След като изпълних горния код, сега ще изпълня същата заявка от първия пример, за да видя резултата.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trustedFROM> s_not_trustedFROM>Резултат:
+----------------+----------------+----------- ----+-----------------+| Таблица | Ограничение | е_забранено | е_не_доверен ||----------------+----------------+------------ ---+------------------|| ConstraintTest | chkPrice | 1 | 1 || ConstraintTest | chkValidEndDate | 1 | 1 || ConstraintTest | chkTeamSize | 1 | 1 || Професия | chkJobTitle | 1 | 1 |+----------------+----------------+----------- ---+------------------+Така че всички ограничения в базата данни са деактивирани (защото is_disabled колоната е настроена на 1 за тези ограничения).
Забележете, че не_доверен колоната също е настроена на 1 . Това е важно съображение, особено ако възнамерявате да активирате отново някое от вашите деактивирани ограничения.
Вижте какво трябва да знаете за WITH NOCHECK, когато активирате ограничение CHECK в SQL Server за информация как да възстановите доверието при повторно активиране на вашите ограничения. Информацията в тази статия се отнася и за външни ключове.
Деактивирайте ограниченията поотделно
Ако искате само да деактивирате ограниченията едно по едно, вижте Как да деактивирате ограничение CHECK в SQL Server за примери.