sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man ändrar en kolumn från Null till Not Null i SQL Server

  • 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]

  1. Välj den senaste raden för varje grupp från oracle

  2. Kan du dra nytta av en anpassad databasapplikation?

  3. Hur använder man Array/Table Parameter till Oracle (ODP.NET 10g) via ADO.NET/C#?

  4. Organisera ditt hemmakontor för ökad produktivitet