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

Come modificare una colonna da Null a Not Null in SQL Server

  • Comprendere le limitazioni dei dati nelle colonne NOT NULL
    • Annullamento dei dati delle colonne esistenti
  • Modificare la struttura dei dati della colonna
    • Verifica annullabilità alterata

Modifica della struttura dei dati di una colonna in SQL Server da NULL a NOT NULL , impedendo così valori non nulli in quella colonna, viene generalmente eseguito utilizzando il relativamente semplice ALTER TABLE sintassi per modificare opportunamente la colonna in questione.

In questo tutorial esamineremo le importanti precauzioni di sicurezza necessarie quando si altera esistente dati in una colonna, prima di emettere effettivamente qualsiasi ALTER comandi che potrebbero causare danni alla tabella stessa.

Comprendere le limitazioni dei dati nelle colonne NOT NULL

Prima di apportare modifiche alla tabella, è importante esaminare brevemente quali dati possono (e non possono) essere specificati all'interno di una colonna esistente che desideri modificare in NOT NULL , assicurando che nessuna riga possa avere un NULL valore in quella colonna.

Soprattutto, tutti i NULL esistenti valori all'interno della colonna devono essere aggiornato a un valore non null prima di ALTER il comando può essere utilizzato con successo e la colonna è stata resa NOT NULL . Qualsiasi tentativo di impostare la colonna su NOT NULL mentre l'attuale NULL i dati rimasti nella colonna risulteranno in un errore e non si verificheranno modifiche.

Annullamento dei dati delle colonne esistenti

Per garantire che non ci siano NULL valori nella nostra colonna, utilizzeremo un UPDATE di base comando, applicabile esplicitamente alle righe in cui il valore è attualmente NULL . Ad esempio, abbiamo una tabella di base di client dati con name , email e phone . Attualmente alcuni record hanno un NULL phone valore, che non vogliamo consentire:

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

Pertanto, possiamo inserire un valore predefinito per tutti i phone valori che sono attualmente NULL con la seguente affermazione:

UPDATE
  clients
SET
  phone = '0-000-000-0000'
WHERE
  phone IS NULL;

Ora il nostro NULL i valori sono stati tutti sostituiti con il valore che consideriamo il 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

Modificare la struttura dei dati della colonna

Ora che non ci sono NULL valori, possiamo emettere il nostro ALTER per aggiornare la colonna in modo che tutte le aggiunte future non consentano NULL valori. Poiché stiamo modificando il phone colonna in questo esempio, l'istruzione sarà simile a questa:

ALTER TABLE
  clients
ALTER COLUMN
  phone
    NVARCHAR(20) NOT NULL;

Verifica annullabilità alterata

Una volta apportata la modifica alla colonna, è buona norma verificare che la colonna non consenta più alcun NULL valori eseguendo un semplice INSERT prova e prova ad inserire un nuovo record con NULL valore nella colonna modificata:

INSERT INTO
  clients(name, email, phone)
VALUES
  ('John Doe', '[email protected]', NULL);

Se tutto è andato secondo i piani, SQL Server visualizzerà un errore che indica che la colonna non consente NULL valori:

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]