Jak zmienić CHECK na tabeli czyli jak wykonać ALTER CHECK?

14-wrz-2011

CHECK pozwala określić, że w danej kolumnie ma być zapisywana tylko taka wartość, która spełnia określony warunek, np wprowadzona liczba ma być większa niż 10.

CREATE TABLE Test
(ID INT IDENTITY PRIMARY KEY,
Value INT CONSTRAINT Test_Value CHECK (Value>10)
)
GO

Jak można zmienić zdefiniowany tu warunek, jeżeli np będziesz wymagał aby Value było >20?Niestety nie masz do dyspozycji polecenia ALTER CHECK. Należy się posłużyć poleceniem ALTER TABLE i to na dodatek dwa razy. Raz aby usunąć poprzedni CHECH, a drugi raz aby go na nowo załoćyć:

Usunięcie CHECK-a

ALTER TABLE Test
DROP CONSTRAINT Test_Value

I ponowne utworzenie:

ALTER TABLE TEST WITH
ADD CONSTRAINT Test_Value CHECK (Value>20)

No cóż, tworząc po raz kolejny CHECK-a możesz doświadczyć pewnych problemów:

Msg 547, Level 16, State 0, Line 1
The ALTER TABLE statement conflicted with the CHECK constraint „Test_Value”. The conflict occurred in database „Test”, table „dbo.Test”, column 'Value’.

Zazwyczaj oznacza to, że w tabeli masz aktualnie dane nie spełniające tego warunku, w naszym przypadku liczby z zakresu 11-20.  Co z tym zrobić możesz przeczytać tutaj

A o CONSTRAINACH i związanych z nimi przygodach opowiada kurs 6232. Zapraszam na autoryzowane szkolenia Microsoft w bit Polska w Opolu, Katowicach i Warszawie.

Komentarze są wyłączone

Autor: Rafał Kraik