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.