- Förstå begränsningarna för data i NOT NULL-kolumner
- Unullifiera befintliga kolumndata
- Ändra kolumndatastrukturen
- Verifiera ändrad nullbarhet
Ändra datastrukturen för en kolumn i SQL Server från NULL
till NOT NULL
, och därmed inte tillåta icke-nullvärden i den kolumnen, utförs vanligtvis med den relativt enkla ALTER TABLE
syntax för att på lämpligt sätt ändra kolumnen i fråga.
I den här handledningen kommer vi att undersöka de viktiga säkerhetsåtgärder som krävs när du ändrar befintlig data i en kolumn, innan någon ALTER
faktiskt utfärdas kommandon som potentiellt skulle skada själva tabellen.
Förstå begränsningarna för data i NOT NULL-kolumner
Innan några ändringar görs i din tabell är det viktigt att kortfattat gå igenom vilka data som kan (och inte) anges i en befintlig kolumn som du vill ändra till NOT NULL
, se till att ingen rad tillåts ha en NULL
värde i den kolumnen.
Mest kritiskt är alla befintliga NULL
värden i kolumnen måste uppdateras till ett icke-nullvärde före ALTER
kommandot kan användas framgångsrikt och kolumnen görs till NOT NULL
. Alla försök att ställa in kolumnen till NOT NULL
medan faktiska NULL
data som finns kvar i kolumnen kommer att resultera i ett fel och ingen förändring kommer att ske.
Unullifying existerande kolumndata
För att säkerställa att det inte finns någon NULL
värden i vår kolumn använder vi en grundläggande UPDATE
kommando, tillämpligt explicit på rader där värdet för närvarande är NULL
. Till exempel har vi en grundläggande tabell över client
data med name
, email
och phone
. För närvarande har några av posterna en NULL
phone
värde, som vi inte vill tillåta:
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
Därför kan vi infoga ett standardvärde för alla phone
värden som för närvarande är NULL
med följande påstående:
UPDATE
clients
SET
phone = '0-000-000-0000'
WHERE
phone IS NULL;
Nu vår NULL
alla värden har ersatts med det värde som vi anser vara 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
Ändra kolumndatastrukturen
Nu när det inte finns någon NULL
värden längre kan vi utfärda vår ALTER
uttalande för att uppdatera kolumnen så att alla framtida tillägg inte tillåter NULL
värden. Eftersom vi ändrar phone
kolumnen i det här exemplet kommer uttalandet att se ut ungefär så här:
ALTER TABLE
clients
ALTER COLUMN
phone
NVARCHAR(20) NOT NULL;
Verifiera ändrad nullbarhet
När ändringen av din kolumn har gjorts är det en god praxis att verifiera att kolumnen inte längre tillåter någon NULL
värden genom att köra en enkel INSERT
testa och försöka infoga en ny post med NULL
värde i den ändrade kolumnen:
INSERT INTO
clients(name, email, phone)
VALUES
('John Doe', '[email protected]', NULL);
Om allt gick enligt plan kommer SQL Server att utfärda ett felmeddelande som säger att kolumnen inte tillåter NULL
värden:
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]