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