- Разбиране на ограниченията на данните в колони NOT NULL
- Отмяна на съществуващи данни в колона
- Променете структурата на данните в колоната
- Проверка на променената нулиране
Промяна на структурата на данните на колона в SQL Server от NULL до NOT NULL , като по този начин се забраняват ненулеви стойности в тази колона, обикновено се изпълнява с помощта на относително простия ALTER TABLE синтаксис, за да промените по подходящ начин въпросната колона.
В този урок ще разгледаме важните предпазни мерки, необходими при промяна на съществуващи данни в колона, преди действително да издадете ALTER команди, които потенциално биха причинили вреда на самата таблица.
Разбиране на ограниченията на данните в колони NOT NULL
Преди да бъдат направени каквито и да е промени във вашата таблица, важно е накратко да прегледате какви данни могат (и не могат) да бъдат посочени в съществуваща колона, която искате да промените на NOT NULL , като се гарантира, че нито един ред не може да има NULL стойност в тази колона.
Най-критичното е, че всички съществуващи NULL стойности в колоната трябва се актуализира до стойност, различна от нула преди ALTER командата може да се използва успешно и колоната да е NOT NULL . Всеки опит за задаване на колоната на NOT NULL докато действително NULL данните, останали в колоната, ще доведат до грешка и няма да настъпи промяна.
Отмяна на данни за съществуващи колони
За да се гарантира, че няма NULL стойности в нашата колона, ще използваме основен UPDATE команда, приложима изрично към редове, където стойността в момента е NULL . Например, имаме основна таблица на client данни с name , email и phone . Понастоящем някои от записите имат NULL phone стойност, която не искаме да допускаме:
clientsID name email phone
1 Neville Estes Quisque@diamProin.com 1-843-863-2697
2 Flynn Fry velit@senectus.net
3 Wyatt Schmidt nibh.dolor@sit.co.uk 1-950-895-1847
4 Oleg Hill lacinia.vitae.sodales@acrisusMorbi.edu 1-173-344-1578
5 Randall Bullock eu@lacus.net
6 Lamar White ut.sem@risus.com 1-421-757-4907
7 Fuller Hill Vivamus.nisi@tempor.ca 1-178-437-8281
8 Ulysses Boyle sem.mollis.dui@Integeraliquamadipiscing.net 1-535-515-1494
9 Paki Palmer nec@euismod.org
10 Kamal Buchanan sapien.gravida@tellusnonmagna.co.uk 1-325-847-4838
Следователно можем да вмъкнем стойност по подразбиране за всички phone стойности, които в момента са NULL със следното изявление:
UPDATE
clients
SET
phone = '0-000-000-0000'
WHERE
phone IS NULL;
Сега нашият NULL всички стойности са заменени със стойността, която считаме за default , 0-000-000-0000 :
clientsID name email phone
1 Neville Estes Quisque@diamProin.com 1-843-863-2697
2 Flynn Fry velit@senectus.net 0-000-000-0000
3 Wyatt Schmidt nibh.dolor@sit.co.uk 1-950-895-1847
4 Oleg Hill lacinia.vitae.sodales@acrisusMorbi.edu 1-173-344-1578
5 Randall Bullock eu@lacus.net 0-000-000-0000
6 Lamar White ut.sem@risus.com 1-421-757-4907
7 Fuller Hill Vivamus.nisi@tempor.ca 1-178-437-8281
8 Ulysses Boyle sem.mollis.dui@Integeraliquamadipiscing.net 1-535-515-1494
9 Paki Palmer nec@euismod.org 0-000-000-0000
10 Kamal Buchanan sapien.gravida@tellusnonmagna.co.uk 1-325-847-4838
Промяна на структурата на данните в колоната
Сега, когато няма NULL повече стойности, можем да издадем нашия ALTER изявление за актуализиране на колоната, така че всички бъдещи допълнения да не позволяват NULL стойности. Тъй като променяме phone колона в този пример, изявлението ще изглежда така:
ALTER TABLE
clients
ALTER COLUMN
phone
NVARCHAR(20) NOT NULL;
Проверка на променената нулиране
След като бъде направена промяната във вашата колона, добра практика е да се уверите, че колоната вече не позволява никакви NULL стойности, като изпълните прост INSERT тествате и се опитвате да вмъкнете нов запис с NULL стойност в променената колона:
INSERT INTO
clients(name, email, phone)
VALUES
('John Doe', 'jdoe@domain.com', NULL);
Ако всичко вървеше по план, SQL Server ще издаде грешка, в която се посочва, че колоната не позволява NULL стойности:
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]