sql >> Databasteknik >  >> RDS >> Sqlserver

ALTER TABLE-satsen kom i konflikt med CHECK-begränsningen i SQL Server - SQL Server / TSQL självstudie del 89

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')
go
 
 
 Den 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


  1. Fråga för att hitta och ta bort dubbletter av data från MYSql-tabellen

  2. Väljer N rader i SQL Server

  3. Postgresql framtvingar unik tvåvägskombination av kolumner

  4. Uppdatera en tabell i Oracle om något fältvärde är null och fastställa att uppdateringen är framgångsrik