- 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 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
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 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
Ä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', 'jdoe@domain.com', 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]