- Zrozumienie ograniczeń danych w kolumnach NOT NULL
- Anulowanie istniejących danych kolumny
- Zmień strukturę danych kolumny
- Zweryfikuj zmienioną nieważność
Zmiana struktury danych kolumny w SQL Server z NULL
na NOT NULL
, uniemożliwiając w ten sposób wartości inne niż null w tej kolumnie, jest zwykle wykonywane przy użyciu stosunkowo prostej ALTER TABLE
składnię, aby odpowiednio zmienić daną kolumnę.
W tym samouczku przeanalizujemy ważne środki ostrożności niezbędne podczas modyfikowania istniejących dane w kolumnie, przed faktycznym wydaniem jakiejkolwiek ALTER
polecenia, które mogłyby spowodować uszkodzenie samego stołu.
Zrozumienie ograniczeń danych w kolumnach NOT NULL
Zanim jakiekolwiek zmiany zostaną wprowadzone do Twojej tabeli, ważne jest, aby krótko przejrzeć, jakie dane można (i nie można) określić w istniejącej kolumnie, którą chcesz zmienić na NOT NULL
, upewniając się, że żaden wiersz nie może mieć NULL
wartość w tej kolumnie.
Co najważniejsze, wszystkie istniejące NULL
wartości w kolumnie muszą być aktualizowane do wartości innej niż null przed ALTER
polecenie może być pomyślnie użyte, a kolumna wykonana NOT NULL
. Każda próba ustawienia kolumny na NOT NULL
podczas gdy rzeczywisty NULL
dane pozostające w kolumnie spowodują błąd i nie nastąpią żadne zmiany.
Anulowanie istniejących danych kolumny
Aby upewnić się, że nie ma NULL
wartości w naszej kolumnie, użyjemy podstawowej UPDATE
polecenie, stosowane jawnie do wierszy, w których wartość jest aktualnie NULL
. Na przykład mamy podstawową tabelę client
dane z name
, email
i phone
. Obecnie kilka rekordów ma wartość NULL
phone
wartość, na którą nie chcemy pozwolić:
clientsID name email phone
1 Neville Estes [email protected] 1-843-863-2697
2 Flynn Fry [email protected]
3 Wyatt Schmidt [email protected] 1-950-895-1847
4 Oleg Hill [email protected] 1-173-344-1578
5 Randall Bullock [email protected]
6 Lamar White [email protected] 1-421-757-4907
7 Fuller Hill [email protected] 1-178-437-8281
8 Ulysses Boyle [email protected] 1-535-515-1494
9 Paki Palmer [email protected]
10 Kamal Buchanan [email protected] 1-325-847-4838
Dlatego możemy wstawić domyślną wartość dla wszystkich phone
wartości, które są obecnie NULL
z następującym stwierdzeniem:
UPDATE
clients
SET
phone = '0-000-000-0000'
WHERE
phone IS NULL;
Teraz nasz NULL
wszystkie wartości zostały zastąpione wartościami, które uważamy za default
, 0-000-000-0000
:
clientsID name email phone
1 Neville Estes [email protected] 1-843-863-2697
2 Flynn Fry [email protected] 0-000-000-0000
3 Wyatt Schmidt [email protected] 1-950-895-1847
4 Oleg Hill [email protected] 1-173-344-1578
5 Randall Bullock [email protected] 0-000-000-0000
6 Lamar White [email protected] 1-421-757-4907
7 Fuller Hill [email protected] 1-178-437-8281
8 Ulysses Boyle [email protected] 1-535-515-1494
9 Paki Palmer [email protected] 0-000-000-0000
10 Kamal Buchanan [email protected] 1-325-847-4838
Zmień strukturę danych kolumny
Teraz, gdy nie ma NULL
wartości dłużej, możemy wydać nasze ALTER
oświadczenie, aby zaktualizować kolumnę, aby wszystkie przyszłe dodatki nie zezwalały na NULL
wartości. Ponieważ zmieniamy phone
w tym przykładzie, instrukcja będzie wyglądać mniej więcej tak:
ALTER TABLE
clients
ALTER COLUMN
phone
NVARCHAR(20) NOT NULL;
Weryfikuj zmienioną nieważność
Po dokonaniu zmiany w Twojej kolumnie, dobrą praktyką jest sprawdzenie, czy kolumna nie zezwala już na żadne NULL
wartości, uruchamiając proste INSERT
test i próba wstawienia nowego rekordu z NULL
wartość w zmienionej kolumnie:
INSERT INTO
clients(name, email, phone)
VALUES
('John Doe', '[email protected]', NULL);
Jeśli wszystko poszło zgodnie z planem, SQL Server wyświetli błąd informujący, że kolumna nie zezwala na NULL
wartości:
Cannot insert the value NULL into column 'phone', table 'library.dbo.clients'; column does not allow nulls. INSERT fails. [SQL State=23000, DB Errorcode=515]