Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да деактивирате всички ограничения за проверка и външни ключове в база данни в SQL Server (примери за T-SQL)

Можете да използвате кода по-долу, за да деактивирате всички 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 за примери.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Връзката беше успешно установена със сървъра, но след това възникна грешка по време на ръкостискането преди влизане

  2. Как да разделя низ, за ​​да мога да получа достъп до елемент x?

  3. SQL Server:каскаден еквивалент на пускане на таблица?

  4. Как да предотвратите атаки с инжектиране на SQL чрез Secure

  5. Как работи функцията SPACE() в SQL Server (T-SQL)