Einsteigerhandbuch zum Prüfen von Einschränkungen in SQL Server

Während meiner Schulzeit sagte einer meiner Lehrer: „Ein Freund von mir erzielte 105 bei einem Wissenschaftstest von 100. Ich fragte mich, wie es möglich ist, 105 von 100 Punkten zu erzielen. In diesem Fall war der Wert überhöht. Später stellte sich heraus, dass es sich bei der Bewertung um eine Fehlkalkulation handelte. Seine Punktzahl war 97. In einigen Kontexten ist ein Wertebereich definiert, und kein Wert sollte den definierten Bereich überschreiten. “

Dasselbe Konzept gilt für die Prüfung von Einschränkungen in SQL Server. Betrachten wir das Alter eines Mitarbeiters als ganzzahligen Datentyp für eine Spalte in einer Mitarbeitertabelle. Einer der Mitarbeiter hat in der Spalte Alter die Zahl -76 (negativ 76) eingegeben. Im Alter ist es nicht möglich, das Alter in einer negativen Zahl zu haben. Der SQL Server gibt keine Fehler aus, da negative Werte in einem Integer-Datentyp zulässig sind. Um dies zu verhindern, sollte die Spalte Alter nur positive Zahlen akzeptieren. Dies kann durch Hinzufügen einer Prüfbedingung für die Spalte Alter für die Employee-Tabelle erreicht werden. Lass uns anfangen.

Erstellen Sie eine Employee-Tabelle mit CHECK-Einschränkungen

Für das Unternehmen ABC müssen Mitarbeiter gemäß ihren Richtlinien mindestens 18 Jahre alt sein, um für sie arbeiten zu können. Daher fügen wir beim Erstellen der Employee-Tabelle eine Prüfbedingung hinzu, um sicherzustellen, dass das Alter der Mitarbeiter immer größer oder gleich 18 ist.

WENN OBJECT_ID (N'Employee ', N'U') NICHT NULL DROP TABLE-Mitarbeiter ist; CREATE TABLE Angestellter (EmployeeId INT PRIMARY KEY, Gehaltsnummer (18,2), Geschlechtsmerkmal (1), Alter INT CHECK (ALTER> = 18) - Prüfbedingung prüfen); 

Die Bedingung CHECK (ALTER> = 18) fügt eine Check-Einschränkung für die Employee-Tabelle hinzu, unter der Bedingung, dass das Alter eines Mitarbeiters mindestens 18 betragen sollte.

Wir werden versuchen, einige Datensätze einzufügen, um sicherzustellen, dass unsere Check-Einschränkung funktioniert.

ein. Fügen Sie einen Mitarbeiter hinzu, der 18 Jahre alt ist.

INSERT INTO Employee (EmployeeId, Name, Gehalt, Geschlecht, Alter) Werte (100, 'Niraj', 67000.00, 'M', 18); (1 Zeile (n) betroffen) 

Das Alter wurde erfolgreich eingefügt.

b. Fügen Sie einen Mitarbeiter mit einem Alter von 15 Jahren hinzu, der gegen den Prüfbeschränkungsbereich verstößt.

INSERT INTO Employee (EmployeeId, Name, Gehalt, Geschlecht, Alter) Werte (101, 'Chetan', 56000.00, 'M', 15); 

SQL Server hat den folgenden Fehler ausgelöst, da Age = 15 unter dem in der CHECK-Einschränkung definierten Bereich liegt.

Msg 547, Ebene 16, Status 0, Zeile 13 Die INSERT-Anweisung steht in Konflikt mit der CHECK-Einschränkung "CK__Employee__Age__3B0BC30C". Der Konflikt ist in der Datenbank "VishLearningDB", Tabelle "dbo.Employee", Spalte "Alter" aufgetreten. Die Anweisung wurde beendet. 

c. Fügen Sie einen Mitarbeiter mit einem Alter von 26 Jahren hinzu.

INSERT INTO Employee (EmployeeId, Name, Gehalt, Geschlecht, Alter) Werte (103, 'Mani', 329999.00, 'F', 15); (1 Zeile (n) betroffen) 

Der Wert wurde erfolgreich eingefügt.

Fügen Sie eine CHECK-Einschränkung für eine vorhandene Tabelle hinzu

Nun möchten wir sicherstellen, dass in unserer Spalte Gender nur die Werte M (männlich) und F (weiblich) zulässig sind.

Wir erstellen eine Check-Einschränkung.

Syntax

ALTER TABLE ADD-Einschränkung  PRÜFEN () 

Beispiel

ALTER TABLE Mitarbeiter ADD Einschränkung CK_Employee_Gender CHECK (Gender = 'M' OR GENDER = 'F'); 

Fügen wir noch einen männlichen und weiblichen Mitarbeiter ein.

INSERT INTO Employee (EmployeeId, Name, Gehalt, Geschlecht, Alter) Werte (104, 'Meera', 23000.00, 'F', 26); INSERT INTO Employee (EmployeeId, Name, Gehalt, Geschlecht, Alter) Werte (105, 'Shailesh', 24000.00, 'M', 28); (1 Zeile (n) betroffen) (1 Zeile (n) betroffen) 

Es wurde erfolgreich eingefügt.

Jetzt werden wir versuchen, ein weiteres Zeichen in die Spalte "Geschlecht" einzufügen.

INSERT INTO Employee (EmployeeId, Name, Gehalt, Geschlecht, Alter) Werte (105, 'Vish', 24000.00, 'V', 28); 

Die Prüfbedingung hat den folgenden Fehler.

Msg 547, Ebene 16, Status 0, Zeile 31 Die INSERT-Anweisung steht in Konflikt mit der CHECK-Einschränkung "CK_Employee_Gender". Der Konflikt ist in der Datenbank "master", Tabelle "dbo.Employee", Spalte "Geschlecht" aufgetreten. Die Anweisung wurde beendet. 

Fügen Sie eine CHECK-Einschränkung der WITH NOCHECK-Option hinzu

Was ist, wenn wir bereits einige Werte eingefügt haben, die nicht der neuen Prüfbedingung entsprechen? Angenommen, in der Spalte "Gehalt" haben wir einen falschen Eintrag mit einem Gehalt von $ -2300.00 eingefügt. Jetzt möchten wir eine Prüfbedingung implementieren, so dass die Spalte Gehalt nur Werte über Null akzeptiert.

Wir werden versuchen, eine Check-Einschränkung mit der Option WITH NOCHECK hinzuzufügen.

Legen Sie zunächst einen Mitarbeiter mit einem Gehalt von -2300.00 ein.

INSERT INTO Employee (EmployeeId, Name, Gehalt, Geschlecht, Alter) Werte (105, 'Vish', -2300.00, 'M', 28); 

Versuchen Sie nun, eine Check-Einschränkung gemäß der obigen Syntax hinzuzufügen.

ALTER TABLE Mitarbeiter ADD Einschränkung CK_Employee_Salary CHECK (Gehalt> 0); 

Es schlägt fehl und gibt die folgende Fehlermeldung aus, da die vorhandenen Werte nicht mit der Prüfbedingungsbedingung übereinstimmen.

Die Anweisung ALTER TABLE steht im Konflikt mit der CHECK-Einschränkung "CK_Employee_Salary". Der Konflikt trat in der Datenbank "VishLearningDB", Tabelle "dbo.Employee", Spalte "Gehalt", auf. 

Im obigen Fall können wir mit WITH NOCHECK dennoch eine Prüfbedingung erstellen. Dadurch werden vorhandene Daten nicht anhand der neuen Prüfbedingung geprüft.

ALTER TABLE Mitarbeiter MIT NOCHECK ADD Einschränkung CK_Employee_Salary CHECK (Gehalt> 0); 

Weiterlesen auf SQL Server aus den Tech-Recipes-Archiven.