Quero 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 SQL Server. Eu sei como obter todos os nomes de restrição de sys.objects
, mas como preencher a ALTER TABLE
parte?
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
Você pode derivar essas informações facilmente juntando -se
sys.tables.object_id = sys.objects.parent_object_id
a esses tipos de objeto.PRINT
está lá apenas para observar, não para copiar e colar a saída (se você quiser executá-lo, é para isso que serve o comentárioEXEC
) - se você tiver muitas restrições, ele pode não mostrar o script inteiro porquePRINT
é limitado a 4.000 caracteres (8kb). Nesses casos, se você precisar validar o script inteiro, veja esta dica para outras formas de validar o script antes de executá-lo. Por exemplo:Quando estiver satisfeito com a saída, descomente o arquivo
EXEC
.Comecei com a resposta aceita e modifiquei a estrutura para usar um loop while em vez de construir a instrução sql completa em sql dinâmico. Eu gosto mais disso por vários motivos.
A consulta não é armazenada na variável @sql grande. Essa implementação permite um Print para cada restrição que é descartada para fins de registro na saída. A execução parecia um pouco mais rápida no meu teste de unidade.