Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Instrukcja ALTER TABLE kolidowała z ograniczeniem CHECK w SQL Server - SQL Server / TSQL Tutorial Part 89

Scenariusz:

Pracujesz jako programista SQL Server, zostaniesz poproszony o dodanie Check Constraint do jednej istniejącej tabeli dbo.Employee w kolumnie FName i napisanie logiki dla Check Constraint, aby zawsze akceptował alfabety.

Kiedy próbowałeś add Check Constraint, wystąpił błąd poniżej.

Msg 547, Level 16, State 0, Line 19
Instrukcja ALTER TABLE spowodowała konflikt z ograniczeniem CHECK "Chk_dbo_Employee_FName".
Konflikt wystąpił w bazie danych „NazwaBazyDanych”, tabela „dbo.Pracownik”, kolumna „NazwaF”.

Rozwiązanie:

Najpierw wygenerujmy scenariusz błędu. Utwórz przykładową tabelę dbo.Employee z przykładowymi danymi.
--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
 
Teraz uruchom instrukcję alter table, aby dodać ograniczenie sprawdzania. Po wykonaniu tej instrukcji otrzymasz powyższy błąd. ponieważ istniejące dane nie kwalifikują się do ograniczenia sprawdzania. Mamy spację w imieniu dla „Raza A”, a nasze ograniczenie sprawdzania mówi, że dane w FName powinny być zawsze alfabetami.
Alter table dbo.Employee
Add Constraint Chk_dbo_Employee_FName
Check (FName not like '%[^a-z]%')
 
 
 1) Pierwsze rozwiązanie:Poprawne istniejące rozwiązanie DataFist może polegać na znalezieniu danych, które nie kwalifikują się do sprawdzenia ograniczenia i poprawie ich, a następnie dodaniu Sprawdź ograniczenie.
2) Jeśli firma nie chce naprawiać istniejących danych i chcesz zaimplementować ograniczenie sprawdzania z postępu, możesz utworzyć ograniczenie sprawdzania bez sprawdzania. W ten sposób nie zweryfikuje istniejących danych względem naszej reguły sprawdzania ograniczeń, ale będzie stosowany tylko do nowych danych.
Alter table dbo.Employee with nocheck
Add Constraint Chk_dbo_Employee_FName
Check (FName not like '%[^a-z]%') 
 
 
 Wstawmy kilka rekordów i sprawdźmy, czy nasze ograniczenie działa zgodnie z oczekiwaniami.
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
 
 
 Pierwsza wstawka nie powiedzie się, ponieważ nie spełnia wymagań naszej reguły Sprawdź ograniczenie. Drugi rekord zostanie wstawiony pomyślnie. Sprawdźmy teraz dane w tabeli.
Jak dodać sprawdzanie ograniczenia do kolumny z istniejącymi danymi w SQL Server

Prezentacja wideo:Jak naprawić błąd instrukcji Alter table, która była w konflikcie z poleceniem Check Constraint


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przejdź przez pierścień schowka w SQL Server Management Studio (SSMS) — samouczek SQL Server / TSQL, część 8

  2. Najlepsze praktyki odzyskiwania po awarii programu Microsoft SQL Server

  3. Model odzyskiwania zmian SQL Server

  4. Funkcje rankingowe w SQL Server

  5. W SQL Server, jak mogę znaleźć wszędzie, gdzie występuje odwołanie do kolumny?