Scenario:
Du arbetar som SQL Server-utvecklare, du ombeds lägga till Check Constraint i en befintlig tabell dbo.Employee på FName-kolumnen och skriva logik för Check Constraint så att den alltid ska acceptera alfabet.När du försökte lägg till Check Constraint, du fick ett fel under.
Msg 547, Level 16, State 0, Line 19
ALTER TABLE-satsen kom i konflikt med CHECK-begränsningen "Chk_dbo_Employee_FName".
Konflikten uppstod i databasen "YourDatabaseName", tabell "dbo.Employee", kolumn "FName".
Lösning:
Låt oss skapa scenariot först för felet. Skapa exempeltabell dbo.Employee med några exempeldata.--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
Kör nu alter table-satsen för att lägga till Check Constraint. När du har kört detta uttalande kommer du att få ovanstående fel. eftersom befintliga data inte kvalificerar sig för Check Constraint. Vi har utrymme i förnamnet för 'Raza A' och vår Check Constraint säger att data i FName alltid ska vara alfabet.
Alter table dbo.Employee Add Constraint Chk_dbo_Employee_FName Check (FName not like '%[^a-z]%')1) Första lösningen:Korrekt Befintlig DataFist-lösning kan vara att du hittar data som inte kvalificerar för Check Constraint och korrigerar det och lägger sedan till Check Constraint.
2) Om företaget inte vill fixa befintlig data och Om du vill implementera Check Constraint från att gå framåt kan du skapa Check Constraint med Nocheck. Genom att göra det kommer det inte att validera befintliga data mot vår Check Constraint-regel utan endast tillämpas på nya data.
Alter table dbo.Employee with nocheck Add Constraint Chk_dbo_Employee_FName Check (FName not like '%[^a-z]%')Låt oss infoga ett par poster och kontrollera om vår begränsning fungerar som förväntat.
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') goDen första infogningen kommer att misslyckas eftersom den inte uppfyller kraven för vår Check Constraint-regel. Andra posten kommer att infogas framgångsrikt. Låt oss kontrollera data i tabellen nu.
Hur man lägger till Check Constraint till kolumn med befintliga data i SQL Server |
Videodemo :Hur man åtgärdar felet Alter-tabellsatsen kom i konflikt med kontrollbegränsningen