Scenariusz:
Pracujesz jako programista SQL Server, musisz utworzyć tabelę dbo.Customer, która powinna zawierać kolumny Imię, Wiek i Typ wieku. Możesz dodać CustomerId jako tożsamość. Musisz utworzyć Ograniczenie sprawdzania w kolumnach Wiek i Typ wieku z poniższą logiką
<65 agetype="Dorosły" and="" p="">
Jeśli prawda, pozwól, aby wstawienie lub aktualizacja rekordu nie powiodły się z powodu ograniczenia sprawdzania.
65>
<65 agetype="Adult" and="" p="">Rozwiązanie:65>
<65 agetype="Adult" and="" p="">Poniższy skrypt może służyć do dodawania ograniczenia sprawdzania w wielu kolumnach zgodnie z naszymi wymaganiami.65>
CREATE TABLE dbo.Customer (
CustomerId INT identity(1, 1)
,NAME VARCHAR(100)
,Age INT
,AgeType VARCHAR(15)
,CONSTRAINT dbo_Customer_AgeAndAgeType CHECK (
(
Age <= 17
AND AgeType = 'Child'
)
OR (
Age > 17
AND Age < 65
AND AgeType = 'Adult'
)
OR (
Age >= 65
AND AgeType = 'Senior'
)
)
) Wstawmy kilka rekordów i spróbujmy sprawdzić, czy sprawdzanie ograniczeń działa zgodnie z oczekiwaniami.
--Correct values accrording to Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Najaf',13,'Child')
go
--Wrong values according to Check Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Leena',14,'Adult')
go
--Correct values accroding to Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Raza',30,'Adult')
go
--Wrong values according to Check Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Aamir',30,'Senior')
go
--Wrong values according to Check Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('John',65,'Adult')
go
--Correct values accroding to Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Kris',65,'Senior')
go (1 wiersz(e) dotyczy)
Msg 547, Level 16, State 0, Line 25
Instrukcja INSERT była w konflikcie z ograniczeniem CHECK "dbo_Customer_AgeAndAgeType". Konflikt wystąpił w bazie danych "NazwaBazyDanych", tabela "dbo.Klient".
Oświadczenie zostało zakończone.
(1 wiersz(e) dotyczy)
Wiadomość 547, Poziom 16, stan 0, wiersz 33
Instrukcja INSERT była w konflikcie z ograniczeniem CHECK "dbo_Customer_AgeAndAgeType". Konflikt wystąpił w bazie danych "NazwaBazyDanych", tabela "dbo.Klient".
Instrukcja została zakończona.
Wiadomość 547, Poziom 16, Stan 0, Wiersz 37
Instrukcja INSERT jest w konflikcie z ograniczenie CHECK "dbo_Customer_AgeAndAgeType". Konflikt wystąpił w bazie danych "NazwaBazyDanych", tabela "dbo.Klient".
Oświadczenie zostało zakończone.
(1 wiersz(e) dotyczy)
Sprawdźmy dane w tabeli za pomocą zapytania wybierającego. Jak widać poniżej, wstawiane są tylko rekordy, które przeszły przez ograniczenie sprawdzania. Nie udało się wstawić pozostałych rekordów.
![]() |
| Jak utworzyć ograniczenie sprawdzania w wielu kolumnach w tabeli SQL Server |
Spróbujmy zaktualizować rekordy i sprawdźmy, czy sprawdzanie ograniczeń działa zgodnie z oczekiwaniami.
update dbo.Customer set Age=30 where Customerid=1
Nie powiodło się z poniższym błędem, ponieważ nie możemy mieć wieku 30 dla AgeType='Child' zgodnie z naszą logiką Check Constraint.
Msg 547, Level 16, State 0, Wiersz 18
Instrukcja UPDATE spowodowała konflikt z ograniczeniem CHECK "dbo_Customer_AgeAndAgeType". Konflikt wystąpił w bazie danych "NazwaBazyDanych", tabela "dbo.Klient".
Oświadczenie zostało zakończone.
Wideo demonstracyjne:Jak utworzyć ograniczenie sprawdzania na Wiele kolumn w SQL Server
