Chwilowe wyłączanie CONSTRAINT CHECK

13-wrz-2012

Wyobraźmy sobie tabelę:

CREATE TABLE test
(Id INT IDENTITY PRIMARY KEY,
Value INT NOT NULL
CONSTRAINT CHK_Test_Value
CHECK (Value<=100))

Jeżeli na chwilę chcesz wyłączyć CONSTRAINA CHECK zrób to tak:

ALTER TABLE test NOCHECK CONSTRAINT CHK_Test_Value

Teraz uda Ci się wstwić rekordy naruszające zasadę <=100.

Kiedy zechcesz włączyć CONSTRAINA spowrotem zrób to tak:

ALTER TABLE test CHECK CONSTRAINT CHK_Test_Value

Uwaga, dane przy takim włączeniu CONSTRAINT nie będą sprawdzane, więc potencjalnie masz teraz w tabeli śmieci. Na dodatek jeżeli wykonasz:

SELECT * FROM sys.check_constraints WHERE name = 'CHK_Test_Value’

to zobaczysz, że w kolumnie is_not_trusted jest wartość 1, czyli serwer nie ufa tabeli, że dane są w niej poprawne. Aby włączyć checka ze sprawdzeniem użyj polecenia:

ALTER TABLE test WITH CHECK CHECK CONSTRAINT CHK_Test_Value

Takie włączenie CONSTRAINT może się nie udać, gdy w tabeli masz niepoprawne dane, ale coś za coś. Musisz sam najpierw uporządkować tabelę.

 

Komentarze:

  1. Mobilo » Blog Archive » Wyłączone constrains napisał,

    […] pisałem w tym artykule możesz chwilowo (np. przed wykonaniem importu) wyłączyć constrainy. Dzięki temu import może […]

Autor: Rafał Kraik