Sie können den folgenden Code verwenden, um alle CHECK
zu deaktivieren und Fremdschlüsseleinschränkungen für die aktuelle Datenbank in SQL Server.
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
Dies verwendet Microsofts undokumentiertes sp_MSforeachtable
gespeicherte Prozedur. Mit diesem Verfahren können Sie Aufgaben für jede Tabelle in einer Datenbank ausführen. Es ist also perfekt für unsere Aufgabe hier – alle CHECK
zu deaktivieren Beschränkungen innerhalb der aktuellen Datenbank.
Unten ist ein Beispiel, wo ich das mache und dann das Ergebnis überprüfe.
Beispiel 1 – Überprüfen Sie die Einschränkungen
Zuerst werfe ich einen kurzen Blick auf den aktuellen CHECK
und Fremdschlüsseleinschränkungen in der Datenbank, um zu sehen, ob sie aktiviert oder deaktiviert sind.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
Ergebnis:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 0 | | ConstraintTest | chkValidEndDate | 0 | 0 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
Es gibt also derzeit vier CHECK
Beschränkungen in der Datenbank, für zwei verschiedene Tabellen.
Wir können sehen, dass alle Beschränkungen aktiviert sind, weil is_disabled auf 0 gesetzt ist .
Beispiel 2 – Deaktivieren Sie die Beschränkungen
Jetzt werde ich alle Einschränkungen deaktivieren:
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
Es ist normalerweise eine gute Idee sicherzustellen, dass Sie die richtige Datenbank verwenden, wenn Sie solche Dinge tun. Wir könnten also den obigen Code ergänzen, indem wir explizit zur richtigen Datenbank wechseln:
USE Test; EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
In diesem Fall wechsle ich zu einer Datenbank namens Test .
Beispiel 3 – Überprüfen Sie das Ergebnis
Nachdem ich den obigen Code ausgeführt habe, führe ich jetzt dieselbe Abfrage aus dem ersten Beispiel aus, um das Ergebnis anzuzeigen.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
Ergebnis:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 1 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 1 | 1 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Daher wurden alle Einschränkungen in der Datenbank deaktiviert (weil die Datei is_disabled Spalte ist auf 1 gesetzt für diese Einschränkungen).
Beachten Sie, dass is_not_trusted ist Spalte wird ebenfalls auf 1 gesetzt . Dies ist eine wichtige Überlegung, insbesondere wenn Sie beabsichtigen, eine Ihrer deaktivierten Einschränkungen wieder zu aktivieren.
Informationen zum Wiederherstellen des Vertrauens beim erneuten Aktivieren Ihrer Einschränkungen finden Sie unter Was Sie über WITH NOCHECK wissen sollten, wenn Sie eine CHECK-Einschränkung in SQL Server aktivieren. Die Informationen in diesem Artikel gelten auch für Fremdschlüssel.
Deaktivieren Sie die Beschränkungen einzeln
Wenn Sie die Einschränkungen nur einzeln deaktivieren möchten, finden Sie Beispiele unter So deaktivieren Sie eine CHECK-Einschränkung in SQL Server.