Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wyłączyć wszystkie ograniczenia wyboru i kluczy obcych w bazie danych w programie SQL Server (przykłady T-SQL)

Możesz użyć poniższego kodu, aby wyłączyć wszystkie CHECK i ograniczenia klucza obcego dla bieżącej bazy danych w SQL Server.

EXEC sp_MSforeachtable @command1="ZMIEŃ TABELĘ? NOCHECK CONSTRAINT ALL"

Wykorzystuje nieudokumentowany sp_MSforeachtable firmy Microsoft procedura składowana. Ta procedura umożliwia wykonywanie zadań względem każdej tabeli w bazie danych. Więc jest to idealne rozwiązanie dla naszego zadania tutaj – aby wyłączyć wszystkie CHECK ograniczenia w bieżącej bazie danych.

Poniżej znajduje się przykład, w którym to robię, a następnie sprawdzam wynik.

Przykład 1 – Przejrzyj ograniczenia

Najpierw rzucę okiem na bieżące CHECK i ograniczenia klucza obcego w bazie danych, aby sprawdzić, czy są włączone lub wyłączone.

SELECT OBJECT_NAME(parent_object_id) AS 'Tabela', nazwa AS 'Ograniczenie', is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trustedFROM sys.check_constraints; 

Wynik:

+----------------+-----------------+---------------- ----+------------------+| Tabela | Ograniczenie | is_disabled | nie jest_zaufany ||----------------+-----------------+------------- ---+------------------|| Test Ograniczeń | chkCena | 0 | 0 || Test Ograniczeń | chkValidEndDate | 0 | 0 || Test Ograniczeń | chkTeamSize | 0 | 0 || Zawód | chkTytułZadania | 0 | 0 |+----------------+-----------------+------------ ---+------------------+

Tak więc obecnie są cztery CHECK ograniczenia w bazie danych dla dwóch różnych tabel.

Widzimy, że wszystkie ograniczenia są włączone, ponieważ jest_wyłączone jest ustawiony na 0 .

Przykład 2 – Wyłącz ograniczenia

Teraz wyłączę wszystkie ograniczenia:

EXEC sp_MSforeachtable @command1="ZMIEŃ TABELĘ? NOCHECK CONSTRAINT ALL"

Zwykle dobrym pomysłem jest upewnienie się, że używasz właściwej bazy danych podczas robienia takich rzeczy. Możemy więc dodać do powyższego kodu, jawnie przełączając się na właściwą bazę danych:

USE Test;EXEC sp_MSforeachtable @command1="ALTER TABLE? NOCHECK CONSTRAINT ALL"

W tym przypadku przełączam się na bazę danych o nazwie Test .

Przykład 3 – Sprawdź wynik

Po uruchomieniu powyższego kodu, teraz uruchomię to samo zapytanie z pierwszego przykładu, aby zobaczyć wynik.

SELECT OBJECT_NAME(parent_object_id) AS 'Tabela', nazwa AS 'Ograniczenie', is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trustedFROM sys.check_constraints; 

Wynik:

+----------------+-----------------+---------------- ----+------------------+| Tabela | Ograniczenie | is_disabled | nie jest_zaufany ||----------------+-----------------+------------- ---+------------------|| Test Ograniczeń | chkCena | 1 | 1 || Test Ograniczeń | chkValidEndDate | 1 | 1 || Test Ograniczeń | chkTeamSize | 1 | 1 || Zawód | chkTytułZadania | 1 | 1 |+----------------+-----------------+------------ ---+------------------+

Więc wszystkie ograniczenia w bazie danych zostały wyłączone (ponieważ jest_wyłączone kolumna jest ustawiona na 1 dla tych ograniczeń).

Zauważ, że jest_nie_zaufany kolumna jest również ustawiona na 1 . Jest to ważna uwaga, zwłaszcza jeśli zamierzasz ponownie włączyć którekolwiek z wyłączonych ograniczeń.

Zobacz, co powinieneś wiedzieć o funkcji NOCHECK podczas włączania ograniczenia wyboru w programie SQL Server, aby uzyskać informacje na temat przywracania zaufania podczas ponownego włączania ograniczeń. Informacje zawarte w tym artykule dotyczą również kluczy obcych.

Wyłącz ograniczenia indywidualnie

Jeśli chcesz wyłączyć ograniczenia tylko jeden po drugim, zobacz Jak wyłączyć ograniczenie CHECK w SQL Server, aby zapoznać się z przykładami.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy wszyscy migrują do chmury?

  2. Nazwane wystąpienie programu SQL Server z projektem Instalatora programu Visual Studio 2017

  3. Polecenie SQL INSERT działa, ale dane nie pojawiają się w tabeli

  4. Jak mogę zmienić ograniczenie klucza podstawowego za pomocą składni SQL?

  5. Ustaw opcję 9 w procedurze składowanej SQL Server przy użyciu WinHttp.WinHttpRequest.5.1 dla TLS 1.2