Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como alterar uma coluna de nula para não nula no SQL Server

  • Compreendendo as limitações de dados em colunas NOT NULL
    • Anulação de dados de coluna existentes
  • Alterar a estrutura de dados da coluna
    • Verificar nulidade alterada

Alterando a estrutura de dados de uma coluna no SQL Server de NULL para NOT NULL , não permitindo valores não nulos nessa coluna, geralmente é executado usando o método ALTER TABLE relativamente simples sintaxe para alterar adequadamente a coluna em questão.

Neste tutorial, examinaremos as importantes precauções de segurança necessárias ao alterar existentes dados em uma coluna, antes de realmente emitir qualquer ALTER comandos que potencialmente causariam danos à própria tabela.

Compreendendo as limitações de dados em colunas NOT NULL


Antes que qualquer alteração seja feita em sua tabela, é importante examinar brevemente quais dados podem (e não podem) ser especificados em uma coluna existente que você deseja alterar para NOT NULL , garantindo que nenhuma linha tenha permissão para ter um NULL valor nessa coluna.

Mais importante, todos os NULL existentes valores dentro da coluna devem ser atualizado para um valor não nulo antes do ALTER comando pode ser usado com sucesso e a coluna feita NOT NULL . Qualquer tentativa de definir a coluna como NOT NULL enquanto real NULL os dados permanecerem na coluna resultarão em erro e nenhuma alteração ocorrerá.

Anulando dados de colunas existentes


Para garantir que não haja NULL valores em nossa coluna, usaremos um UPDATE básico comando, aplicável explicitamente a linhas onde o valor é atualmente NULL . Por exemplo, temos uma tabela básica de client dados com name , email e phone . Atualmente alguns dos registros têm um NULL phone valor, que não queremos permitir:
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

Portanto, podemos inserir um valor padrão para todos os phone valores que são atualmente NULL com a seguinte afirmação:
UPDATE
  clients
SET
  phone = '0-000-000-0000'
WHERE
  phone IS NULL;

Agora nosso NULL os valores foram todos substituídos pelo valor que consideramos o 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

Alterar a estrutura de dados da coluna


Agora que não há NULL valores por mais tempo, podemos emitir nosso ALTER instrução para atualizar a coluna para que todas as adições futuras não permitam NULL valores. Como estamos alterando o phone coluna neste exemplo, a instrução será algo como isto:
ALTER TABLE
  clients
ALTER COLUMN
  phone
    NVARCHAR(20) NOT NULL;

Verificar nulidade alterada


Depois que a alteração em sua coluna for feita, é uma boa prática verificar se a coluna não permite mais nenhum NULL valores executando um simples INSERT teste e tentando inserir um novo registro com o NULL valor na coluna alterada:
INSERT INTO
  clients(name, email, phone)
VALUES
  ('John Doe', '[email protected]', NULL);

Se tudo ocorreu conforme o planejado, o SQL Server emitirá um erro informando que a coluna não permite NULL valores:
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]