- Forståelse af begrænsningerne for data i NOT NULL-kolonner
- Unullificering af eksisterende kolonnedata
- Rediger kolonnedatastrukturen
- Bekræft ændret nullbarhed
Ændring af datastrukturen for en kolonne i SQL Server fra NULL
til NOT NULL
, hvorved ikke-nullværdier i den kolonne ikke tillades, udføres generelt ved hjælp af den relativt simple ALTER TABLE
syntaks for at ændre den pågældende kolonne korrekt.
I denne øvelse vil vi undersøge de vigtige sikkerhedsforanstaltninger, der er nødvendige, når du ændrer eksisterende data i en kolonne, før der faktisk udstedes en ALTER
kommandoer, der potentielt ville forårsage skade på selve bordet.
Forståelse af begrænsningerne for data i NOT NULL-kolonner
Før der foretages ændringer i din tabel, er det vigtigt kort at gennemgå, hvilke data der kan (og ikke) specificeres i en eksisterende kolonne, som du ønsker at ændre til NOT NULL
, hvilket sikrer, at ingen række må have en NULL
værdi i den kolonne.
Mest kritisk er alle eksisterende NULL
værdier i kolonnen skal blive opdateret til en ikke-nul værdi før ALTER
kommandoen kan bruges med succes og kolonnen laves NOT NULL
. Ethvert forsøg på at indstille kolonnen til NOT NULL
mens den faktiske NULL
data forbliver i kolonnen vil resultere i en fejl, og der vil ikke ske nogen ændring.
Unullificering af eksisterende kolonnedata
For at sikre, at der ikke er nogen NULL
værdier i vores kolonne, bruger vi en grundlæggende UPDATE
kommando, der eksplicit gælder for rækker, hvor værdien i øjeblikket er NULL
. For eksempel har vi en grundlæggende tabel over client
data med name
, email
og phone
. I øjeblikket har nogle få af posterne en NULL
phone
værdi, som vi ikke ønsker at tillade:
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
Derfor kan vi indsætte en standardværdi for alle phone
værdier, der i øjeblikket er NULL
med følgende udsagn:
UPDATE
clients
SET
phone = '0-000-000-0000'
WHERE
phone IS NULL;
Nu er vores NULL
værdier er alle blevet erstattet med den værdi, vi betragter som 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
Rediger kolonnedatastrukturen
Nu hvor der ikke er nogen NULL
værdier længere, kan vi udstede vores ALTER
sætning for at opdatere kolonnen, så alle fremtidige tilføjelser ikke tillader NULL
værdier. Da vi ændrer phone
kolonne i dette eksempel, vil sætningen se nogenlunde sådan ud:
ALTER TABLE
clients
ALTER COLUMN
phone
NVARCHAR(20) NOT NULL;
Bekræft ændret nullabilitet
Når ændringen af din kolonne er foretaget, er det en god praksis at kontrollere, at kolonnen ikke længere tillader nogen NULL
værdier ved at køre en simpel INSERT
test og forsøger at indsætte en ny post med NULL
værdi i den ændrede kolonne:
INSERT INTO
clients(name, email, phone)
VALUES
('John Doe', '[email protected]', NULL);
Hvis alt gik efter planen, vil SQL Server udsende en fejl, der angiver, at kolonnen ikke tillader NULL
værdier:
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]