Se eu quiser excluir todas as tabelas do meu banco de dados como esta, ele cuidará da restrição de chave estrangeira? Se não, como eu cuido disso primeiro?
GO
IF OBJECT_ID('dbo.[Course]','U') IS NOT NULL
DROP TABLE dbo.[Course]
GO
IF OBJECT_ID('dbo.[Student]','U') IS NOT NULL
DROP TABLE dbo.[Student]
Respostas:
Não, isso não descartará sua tabela se houver realmente chaves estrangeiras fazendo referência a ela.
Para obter todos os relacionamentos de chave estrangeira que fazem referência à sua tabela, você pode usar este SQL (se você estiver no SQL Server 2005 e acima):
e, se houver alguma, com esta instrução aqui, você pode criar instruções SQL para realmente eliminar essas relações FK:
fonte
No SQL Server Management Studio 2008 (R2) e mais recente, você pode clicar com o botão direito do mouse no
Selecione as tabelas que você deseja DROP.
Selecione "Salvar na nova janela de consulta".
Clique no botão Avançado.
Defina Script DROP e CREATE como Script DROP.
Defina chaves estrangeiras de script como True.
Clique OK.
Clique em Avançar -> Avançar -> Concluir.
Veja o script e depois execute.
fonte
Se você soltar a tabela "filho" primeiro, a chave estrangeira será descartada também. Se você tentar soltar a tabela "pai" primeiro, você receberá uma mensagem "Não foi possível soltar o objeto 'a' porque é referenciada por uma restrição FOREIGN KEY". erro.
fonte
Aqui está outra maneira de descartar todas as tabelas corretamente, usando o
sp_MSdropconstraints
procedimento O código mais curto que consegui pensar:fonte
Se for o SQL Server, você deve eliminar a restrição antes de poder soltar a tabela.
fonte
Versão ligeiramente mais genérica do que @mark_s postou, isso me ajudou
basta conectar o nome da tabela e executar o resultado.
fonte
Aqui está outra maneira de excluir todas as restrições seguidas pelas próprias tabelas, usando um truque de concatenação
FOR XML PATH('')
que permite mesclar várias linhas de entrada em uma única linha de saída. Deve funcionar em qualquer coisa SQL 2005 e posterior.Deixei os comandos EXECUTE comentados por segurança.
fonte
Aqui está um script completo para implementar uma solução:
fonte
fonte
Usando o SQL Server Manager, você pode eliminar restrições de chave estrangeira da interface do usuário. Se você deseja excluir a tabela,
Diary
mas a tabela Usuário possui uma chave estrangeiraDiaryId
apontando para aDiary
tabela, você pode expandir (usando o símbolo de mais) aUser
tabela e, em seguida, expandir aForeign Keys
seção. Clique com o botão direito na chave estrangeira que aponta para a tabela do diário e selecioneDelete
. Você pode expandir aColumns
seção, clicar com o botão direito e excluir a colunaDiaryId
também. Então você pode simplesmente executar:Sei que sua pergunta real é sobre a exclusão de todas as tabelas, portanto isso pode não ser útil para esse caso. No entanto, se você quiser excluir algumas tabelas, isso é útil, acredito (o título não menciona explicitamente a exclusão de todas as tabelas).
fonte
Se você estiver em um servidor mysql e não se importar de perder suas tabelas, poderá usar uma consulta simples para excluir várias tabelas de uma vez:
Dessa forma, não importa em que ordem você usa a tabela na sua consulta.
Se alguém vai dizer algo sobre o fato de que essa não é uma boa solução se você tiver um banco de dados com muitas tabelas: eu concordo!
fonte
Incorrect syntax near '='. (102) (SQLExecDirectW)
foreign_key_checks
não funcionará no servidor MSSQL. Eu acho que é uma variável específica do MySQL.execute o código abaixo para obter o nome da restrição de chave estrangeira que bloqueia sua queda. Por exemplo, eu pego a
roles
mesa.você receberá o nome FK como abaixo:
FK__Table1__roleId__1X1H55C1
Agora execute o código abaixo para remover a referência FK obtida de cima.
Feito!
fonte
Então é muito mais fácil descartar o banco de dados inteiro:
fonte
Se você deseja
DROP
uma tabela que tenha sido referenciada por outra tabela usando a chave estrangeira, useDROP TABLE *table_name* CASCADE CONSTRAINTS;
Eu acho que deveria funcionar para você.
fonte
cascade constraints
no servidor sql