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

Como você adiciona uma coluna NOT NULL a uma tabela grande no SQL Server?


Eu corri para este problema para o meu trabalho também. E minha solução está junto #2.

Aqui estão meus passos (estou usando o SQL Server 2005):

1) Adicione a coluna à tabela com um valor padrão:
ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')

2) Adicione um NOT NULL restrição com o NOCHECK opção. O NOCHECK não se aplica a valores existentes:
ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)

3) Atualize os valores de forma incremental na tabela:
GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000

  • A instrução de atualização atualizará apenas no máximo 3.000 registros. Isso permite salvar um pedaço de dados no momento. Eu tenho que usar "MyColumn IS NULL" porque minha tabela não possui uma chave primária de sequência.

  • GO 1000 executará a instrução anterior 1000 vezes. Isso atualizará 3 milhões de registros, se precisar de mais é só aumentar esse número. Ele continuará a ser executado até que o SQL Server retorne 0 registros para a instrução UPDATE.