Eu tentei:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Mas dá esta mensagem de erro:
ALTER TABLE só permite a adição de colunas que podem conter nulos ou ter uma definição DEFAULT especificada
Eu tentei:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Mas dá esta mensagem de erro:
ALTER TABLE só permite a adição de colunas que podem conter nulos ou ter uma definição DEFAULT especificada
Como uma opção, você pode inicialmente criar uma coluna que pode ser nula e, em seguida, atualizar a coluna da tabela com valores válidos não nulos e, finalmente, a coluna ALTER para definir a restrição NOT NULL:
ALTER TABLE MY_TABLE ADD STAGE INT NULL
GO
UPDATE MY_TABLE SET <a valid not null values for your column>
GO
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL
GO
Outra opção é especificar o valor padrão correto para sua coluna:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD: observe que a resposta acima contém o GO
que é obrigatório quando você executa este código no servidor Microsoft SQL. Se você deseja realizar a mesma operação no Oracle ou MySQL, você precisa usar ponto-e-vírgula ;
assim:
ALTER TABLE MY_TABLE ADD STAGE INT NULL;
UPDATE MY_TABLE SET <a valid not null values for your column>;
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL;
update
declaração perigosa que você mencionou seria prejudicial em qualquer consulta. Deve ser simples o suficiente para ver se você tem uma coluna extra naupdate
instrução aqui. Em geral, você adicionaria apenas uma ou duas colunas de cada vez. Se acontecer de você adicionar uma coluna extra em suaupdate
instrução que não pertence lá, neste exemplo, então talvez você não deva ser o responsável pelos dados em primeiro lugar.ALTER COLUMN
NÃO é compatível com SQLite.GO
antes e parece não fazer parte da especificação SQL , portanto, provavelmente levará à falha de scripts que não sejam executados por uma das ferramentas que o suportam. Basta usar ponto-e-vírgula? Eu não recomendo espalhar os padrões da Microsoft, pois eles raramente se preocupam com qualquer padrão estabelecido e razoável, mas inventam o seu próprio apenas para ter o seu próprio inventado. Além disso, uma resposta útil.Se você não está permitindo que a coluna seja nula, você precisa fornecer um padrão para preencher as linhas existentes. por exemplo
Na Enterprise Edition, esta é uma alteração apenas de metadados desde 2012
fonte
A mensagem de erro é bastante descritiva, tente:
fonte
Outras implementações de SQL têm restrições semelhantes. O motivo é que adicionar uma coluna requer adicionar valores para essa coluna (logicamente, mesmo se não fisicamente), cujo padrão é
NULL
. Se você não permitirNULL
e não tiver umdefault
, qual será o valor?Como o SQL Server oferece suporte
ADD CONSTRAINT
, recomendo a abordagem de Pavel de criar uma coluna anulável e, em seguida, adicionar umaNOT NULL
restrição depois de preenchê-la com nãoNULL
valores.fonte
Isso funcionou para mim, também pode ser "emprestado" da visualização do projeto, faça alterações -> clique com o botão direito -> gerar script de alteração.
fonte
fonte
fonte