Como descartar uma coluna que está com restrição padrão no SQL Server 2008?
Minha consulta é
alter table tbloffers
drop column checkin
Estou ficando abaixo do erro
O check-in ALTER TABLE DROP COLUMN falhou porque um ou mais objetos acessam essa coluna.
Alguém pode corrigir minha consulta para soltar uma coluna com restrição?
sql-server
sql-server-2008
Robin Michael Poothurai
fonte
fonte
Respostas:
Primeiro você deve soltar a problemática
DEFAULT constraint
, depois você pode soltar a colunaMas o erro pode aparecer por outros motivos - por exemplo, a função definida pelo usuário ou a visualização com a
SCHEMABINDING
opção definida para eles.UPD: Script de eliminação de restrições completamente automatizado:
fonte
Aqui está outra maneira de eliminar uma restrição padrão com um nome desconhecido sem precisar primeiro executar uma consulta separada para obter o nome da restrição:
fonte
Você também pode soltar a coluna e suas restrições em uma única instrução, em vez de individualmente.
Algum SQL dinâmico que procurará os nomes de restrições de verificação dependentes e restrições padrão e os descartará junto com a coluna abaixo
(mas não outras dependências possíveis da coluna, como chaves estrangeiras, restrições de chave única e primária, colunas computadas, índices)
fonte
DROP CONSTRAINT
ver a gramática. Se você não nomear explicitamente as restrições, deverá procurar o nome gerado pelo SQL Server, por exemplo, conforme a resposta de marc. Mas, depois de descobrir isso, você ainda pode eliminar a restrição e a coluna ao mesmo tempo.Encontre a restrição padrão com esta consulta aqui:
Isso fornece o nome da restrição padrão, bem como o nome da tabela e da coluna.
Quando você tem essas informações, primeiro descarte a restrição padrão:
e então você pode soltar a coluna
fonte
ALTER TABLE table DROP CONSTRAINT DF_XY DROP COLUMN XY
Infelizmente, a sintaxe desta afirmação não está correta #DROP
comandos para fazer este trabalhoO seguinte funcionou para mim em um back-end do SQL Azure (usando o SQL Server Management Studio), então YMMV, mas, se funcionar para você, é muito mais simples que as outras soluções.
fonte
Eu tenho o mesmo:
ALTER TABLE DROP COLUMN falhou porque um ou mais objetos acessam esta mensagem da coluna .
Minha coluna tinha um índice que precisava ser excluído primeiro. O uso do sys.indexes fez o truque:
fonte
Atualizei o script um pouco para a minha versão do SQL Server
fonte
Nem sempre é apenas uma restrição padrão que impede a queda de uma coluna e, às vezes, os índices também podem impedir que você a solte. Então, eu escrevi um procedimento que descarta qualquer índice ou restrição em uma coluna e a coluna no final.
fonte