Desejo eliminar todas as restrições padrão, verificar restrições, restrições exclusivas, chaves primárias e chaves estrangeiras de todas as tabelas em um banco de dados do SQL Server. Sei como obter todos os nomes de restrições sys.objects
, mas como preencho a ALTER TABLE
peça?
sql-server
ddl
constraint
Aaron Bertrand
fonte
fonte
Respostas:
Você pode derivar essas informações facilmente ingressando
sys.tables.object_id = sys.objects.parent_object_id
nesses tipos de objetos.PRINT
está disponível apenas para observação - se você tiver muitas restrições, ele pode não mostrar o script inteiro porque está limitado a 8K. Nesses casos, consulte esta dica para outras maneiras de validar o script antes de executar.Quando estiver satisfeito com a saída, remova o comentário do
EXEC
.fonte
ORDER BY (CASE WHEN c.[type] IN ('PK', 'UQ') THEN 1 ELSE 0 END)
Comecei com a resposta aceita e modifiquei a estrutura para usar um loop while, em vez de criar a instrução sql completa no sql dinâmico. Eu gosto mais disso por várias razões.
A consulta não é armazenada na variável @sql grande. Essa implementação permite uma impressão para cada restrição descartada para fins de registro na saída. A execução parecia um pouco mais rápida no meu teste de unidade.
fonte