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

Jak utworzyć ograniczenie sprawdzania w wielu kolumnach w SQL Server — samouczek SQL Server/TSQL — część 84

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 agetype="Adult" and="" p="">Rozwiązanie:

<65 agetype="Adult" and="" p="">Poniższy skrypt może służyć do dodawania ograniczenia sprawdzania w wielu kolumnach zgodnie z naszymi wymaganiami.


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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konfiguracja poczty bazy danych w SQL Server

  2. Projekt bazy danych dla ustawień użytkownika

  3. Używanie Excel VBA do uruchamiania zapytania SQL

  4. Jak zaktualizować z SELECT w SQL Server?

  5. Jak używać tego samego harmonogramu dla wielu zadań agenta programu SQL Server (T-SQL)