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

So deaktivieren Sie eine CHECK-Einschränkung in SQL Server (T-SQL-Beispiele)

Wenn Sie versuchen, Daten in eine Tabelle einzugeben, die über ein vollständig aktiviertes CHECK verfügt Einschränkung, Sie werden nur erfolgreich sein, wenn die Daten diese Einschränkung nicht verletzen. Wenn Sie versuchen, ungültige Daten einzugeben, schlägt der Vorgang mit einem Fehler fehl.

Aber was ist, wenn Sie sich in der Situation befinden, in der Sie wirklich müssen? Daten einfügen, die gegen den CHECK verstoßen Zwang? Möglicherweise gilt die Einschränkung nicht mehr, oder Sie haben eine Ausnahme, bei der eine Zeile die Einschränkung umgehen darf. In jedem Fall können Sie nichts außerhalb der Beschränkungsregeln eingeben.

Wenn Sie sich in dieser Situation befinden, können Sie die Einschränkung jederzeit deaktivieren. So machen Sie das mit Transact-SQL.

Beispiel 1 – Deaktivieren Sie die CHECK-Einschränkung

Zum Deaktivieren eines CHECK verwenden Sie NOCHECK Argument innerhalb einer ALTER TABLE Aussage.

So:

ALTER TABLE Beruf NOCHECK CONSTRAINT chkJobTitle; 

Dieser Code deaktiviert eine Beschränkung namens chkJobTitle .

Beispiel 2 – Überprüfung der CHECK-Einschränkung

Wir können die sys.check_constraints abfragen Systemansicht, um zu überprüfen, ob unsere Einschränkung deaktiviert wurde:

SELECT name, is_disabled, is_not_trusted, definitionFROM sys.check_constraints;

Ergebnis:

+------------+---------------+------------ ------+----------------------------------------+| Name | ist_deaktiviert | is_not_trusted | Definition ||-----------------+---------------+--------------------- -----+----------------------------------------|| chkPreis | 0 | 0 | ([Preis]>(0)) || chkValidEndDate | 0 | 0 | ([Enddatum]>=[Startdatum]) || chkTeamSize | 0 | 0 | ([Teamgröße]>=(5) UND [Teamgröße]<=(20)) || chkJobTitel | 1 | 1 | ([JobTitle]<>'Digitaler Nomade') |+-----------------+---------------+--- -------------------------------------------------- ------+

In diesem Fall habe ich alle CHECK ausgewählt Beschränkungen aus der aktuellen Datenbank.

Wir können sehen, dass dies die einzige ist, die deaktiviert ist (weil ihre is_disabled Spalte ist auf 1 gesetzt ).

Möglicherweise stellen Sie fest, dass is_not_trusted ist Spalte wird ebenfalls auf 1 gesetzt . Dies zeigt an, dass der CHECK Einschränkung wurde vom System nicht für alle Zeilen verifiziert.

Mit anderen Worten, wir können nicht mehr davon ausgehen, dass die Einschränkung alle Daten überprüft hat. Die Tatsache, dass die Einschränkung deaktiviert ist, bedeutet, dass Daten jetzt in die Datenbank gelangen können, ohne von der Einschränkung geprüft zu werden. Daher besteht die Möglichkeit, dass ungültige Daten in der Datenbank vorhanden sind.

Falls Sie CHECK jemals wieder aktivieren müssen Einschränkung haben Sie die Möglichkeit, das Vertrauen der Einschränkung wiederherzustellen (indem Sie die WITH CHECK Möglichkeit). Dadurch werden alle vorhandenen Zeilen überprüft, bevor die Einschränkung aktiviert wird.

Sie haben auch die Option nicht Überprüfung der vorhandenen Daten, dies sollte aber nur in seltenen Fällen erfolgen.

Unter Was Sie über WITH NOCHECK beim Aktivieren einer CHECK-Einschränkung in SQL Server wissen sollten, erfahren Sie, wie sich das Vertrauen auswirkt, je nachdem, wie Sie die Einschränkung erneut aktivieren.