sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan ændres en kolonne fra Null til Ikke Null i SQL Server

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

  1. Forkert sortering/sortering/rækkefølge med mellemrum i Postgresql 9.4

  2. ORA-12704:tegnsæt uoverensstemmelse

  3. Er det muligt at forespørge i en kommasepareret kolonne for en bestemt værdi?

  4. Fysiske replikationsmekanismer i PostgreSQL