Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So deaktivieren Sie alle CHECK- und Fremdschlüsselbeschränkungen in einer Datenbank in SQL Server (T-SQL-Beispiele)

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.