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

Hinzufügen einer CHECK-Einschränkung zu einer vorhandenen Tabelle in SQL Server (T-SQL)

Dieser Artikel zeigt, wie ein CHECK hinzugefügt wird Beschränkung auf eine vorhandene Tabelle.

Sie können einer bestehenden Tabelle eine Einschränkung hinzufügen, indem Sie ALTER TABLE verwenden -Anweisung zusammen mit der ADD CONSTRAINT Streit. Beispiele unten.

Beispiel 1 – Erstellen Sie die Tabelle

Lassen Sie uns zunächst eine Tabelle erstellen, für die wir den CHECK hinzufügen Einschränkung.

CREATE TABLE Event
(
  EventId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  EventName varchar(255) NOT NULL,
  StartDate date NOT NULL,
  EndDate date NOT NULL,
  Price smallmoney NOT NULL
);

Beispiel 2 – Fügen Sie eine Beschränkung auf Spaltenebene hinzu

Jetzt fügen wir ein CHECK hinzu Beschränkung auf den Preis Spalte.

ALTER TABLE Event
  ADD CONSTRAINT chkPrice CHECK (Price > 0);

Diese Einschränkung stellt sicher, dass der Preis immer größer als Null ist.

Nachdem die Einschränkung hinzugefügt wurde, passiert Folgendes, wenn wir versuchen, ungültige Daten einzufügen:

INSERT INTO Event ( EventName, StartDate, EndDate, Price )
VALUES ( 'ICCC 2020', '2020-01-01', '2020-02-02', 0 );

Ergebnis:

Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "chkPrice". The conflict occurred in database "EMS", table "dbo.Event", column 'Price'.

In diesem Fall das CHECK Einschränkung gibt an, dass alle Daten im Price Spalte muss größer als 0 sein. Mit anderen Worten, der Preis kann nicht null und nicht negativ sein.

Dies wird als Einschränkung auf Spaltenebene bezeichnet , da es in einer einzelnen Spalte definiert ist. Es gilt für Daten in einer Spalte.

Beispiel 3 – Hinzufügen einer Einschränkung auf Tabellenebene

Lassen Sie uns nun einen CHECK auf Tabellenebene hinzufügen Zwang. Dadurch werden Daten in zwei Spalten geprüft.

ALTER TABLE Event
  ADD CONSTRAINT chkEndDate 
  CHECK (EndDate >= StartDate);

In diesem Fall füge ich eine Einschränkung hinzu, um sicherzustellen, dass das Enddatum niemals vor dem Startdatum liegen kann. Dies prüft Daten über zwei Spalten und ist daher eine Einschränkung auf Tabellenebene.

Versuchen Sie, einen ungültigen Wert einzufügen:

INSERT INTO Event ( EventName, StartDate, EndDate, Price )
VALUES ( 'ICCC 2020', '2020-01-01', '1970-02-02', 150.00 );

Ergebnis:

Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "chkEndDate". The conflict occurred in database "EMS", table "dbo.Event".
aufgetreten

Wie erwartet schlägt der Vorgang fehl, da mein Enddatum vor dem Startdatum liegt.

Beachten Sie, dass ich zum Testen dieser Einschränkung den Preis auf einen gültigen Wert erhöhen musste, um zu verhindern, dass die vorherige Einschränkung zuerst ausgelöst wird (CHECK Einschränkungen werden in der Reihenfolge ihrer Erstellung validiert).

Beispiel 4 – Erfolgreiches Einfügen von Daten, die der Einschränkung entsprechen

Um eine Zeile erfolgreich einzufügen, müssen wir nur sicherstellen, dass wir gültige Werte einfügen.

Beispiel:

INSERT INTO Event ( EventName, StartDate, EndDate, Price )
VALUES ( 'ICCC 2020', '2020-01-01', '2020-02-02', 150.00 );

SELECT * FROM Event;

Ergebnis:

+-----------+-------------+-------------+------------+----------+
| EventId   | EventName   | StartDate   | EndDate    | Price    |
|-----------+-------------+-------------+------------+----------|
| 4         | ICCC 2020   | 2020-01-01  | 2020-02-02 | 150.0000 |
+-----------+-------------+-------------+------------+----------+

Beachten Sie, dass die EventId Spalte bereits auf 4 erhöht wurde. Dies liegt daran, dass es sich um eine IDENTITY handelt Säule. Eine wichtige Sache, die Sie sich über IDENTITY merken sollten Spalten ist, dass sie auch dann inkrementieren, wenn eine Einschränkung ein INSERT verursacht Vorgang fehlschlägt.

Einige Einschränkungen von CHECK-Constraints

Hier sind einige Einschränkungen, die Sie bei der Arbeit mit CHECK beachten sollten Einschränkungen:

  • Die Suchbedingung muss zu einem booleschen Ausdruck ausgewertet werden und darf nicht auf eine andere Tabelle verweisen.
  • Der Ausdruck darf keine Alias-Datentypen enthalten.
  • CHECK Beschränkungen können nicht für Text definiert werden , ntext , oder Bild Spalten.