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

Die ALTER TABLE-Anweisung stand in Konflikt mit der CHECK-Einschränkung in SQL Server – SQL Server / TSQL-Lernprogramm Teil 89

Szenario:

Sie arbeiten als SQL Server-Entwickler und werden gebeten, Check Constraint zu einer vorhandenen Tabelle dbo.Employee in der FName-Spalte hinzuzufügen und Logik für Check Constraint zu schreiben, sodass es immer Alphabete akzeptieren sollte.

Als Sie es versucht haben Check Constraint hinzufügen, Sie haben folgenden Fehler erhalten.

Msg 547, Level 16, State 0, Line 19
Die ALTER TABLE-Anweisung stand in Konflikt mit dem CHECK Constraint "Chk_dbo_Employee_FName".
Der Konflikt ist in der Datenbank „YourDatabaseName“, Tabelle „dbo.Employee“, Spalte „FName“ aufgetreten.

Lösung:

Lassen Sie uns zuerst das Szenario für den Fehler generieren. Beispieltabelle dbo.Employee mit einigen Beispieldaten erstellen.
--Create Table  
use YourDatabaseName
go
Create table dbo.Employee
(
FName VARCHAR(100) Not Null,
LName VARCHAR(100),
StreetAddress VARCHAR(255)
)
--Insert data in sql table
insert into dbo.Employee(FName,LName,StreetAddress)
values ('Aamir','Shahzad','xyz address')
go
insert into dbo.Employee(FName,LName,StreetAddress)
values ('Raza A',Null,'abc address')
go
 
Führen Sie nun die Anweisung alter table aus, um Check Constraint hinzuzufügen. Sobald Sie diese Anweisung ausführen, erhalten Sie den obigen Fehler. da vorhandene Daten sich nicht für Check Constraint qualifizieren. Wir haben Platz im Vornamen für 'Raza A' und unsere Check Constraint sagt, dass die Daten in FName immer Buchstaben sein sollten.
Alter table dbo.Employee
Add Constraint Chk_dbo_Employee_FName
Check (FName not like '%[^a-z]%')
 
 
 1) Erste Lösung:Korrigieren Sie die vorhandene DataFist-Lösung, Sie finden die Daten, die sich nicht für Check Constraint qualifizieren, und korrigieren diese und fügen dann Check Constraint hinzu.
2) Wenn Unternehmen die vorhandenen Daten nicht korrigieren möchten und Check Constraint von vornherein implementieren möchten, können Sie den Check Constraint mit Nocheck erstellen. Dadurch werden vorhandene Daten nicht anhand unserer Check-Constraint-Regel validiert, sondern nur auf neue Daten angewendet.
Alter table dbo.Employee with nocheck
Add Constraint Chk_dbo_Employee_FName
Check (FName not like '%[^a-z]%') 
 
 
 Lassen Sie uns ein paar Datensätze einfügen und prüfen, ob unsere Einschränkung wie erwartet funktioniert.
insert into dbo.Employee(FName,LName,StreetAddress)
values ('Test 123',Null,'test address')
go

insert into dbo.Employee(FName,LName,StreetAddress)
values ('Najaf',Null,'test address')
go
 
 
 Die erste Einfügung schlägt fehl, da sie sich nicht mit unserer Check Constraint-Regel qualifiziert. Der zweite Datensatz wird erfolgreich eingefügt. Sehen wir uns jetzt die Daten in der Tabelle an.
So fügen Sie Check Constraint zu Spalte mit vorhandenen Daten in SQL Server hinzu

Video-Demo:So beheben Sie den Fehler, dass die Alter-Table-Anweisung im Konflikt mit der Check-Einschränkung steht