SQL DROP TABLE contrainte de clé étrangère
Si je veux supprimer toutes les tables de ma base de données comme cela, il va prendre soin de la contrainte de clé étrangère? Si non, comment dois-je prendre soin de qui d'abord?
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]
- suivez ce lien
- Cochez cette réponse, il m'a aidé 😉 stackoverflow.com/a/5488670/2205144
Vous devez vous connecter pour publier un commentaire.
Non, ce ne sera pas tomber votre table si il y a en effet des clés étrangères référençant.
Pour obtenir toutes les relations de clé étrangère référençant votre table, vous pouvez utiliser cette SQL (si vous êtes sur SQL Server 2005 et jusqu'):
et si il y en a, avec cette déclaration ici, vous pouvez créer des instructions SQL pour réellement supprimer ceux FK relations:
SET foreign_key_checks = 0; DROP TABLE IF EXISTS table_a,table_b,table_c,table_etc; SET foreign_key_checks = 1;
De cette manière, il n'a pas d'importance dans quel ordre utiliser les tables dans votre requête.Dans SQL Server Management Studio 2008 (R2) et le plus récent, vous pouvez faire un Clic Droit sur le
Sélectionnez les tables que vous souhaitez DÉPOSER.
Sélectionnez "Enregistrer dans une nouvelle fenêtre de requête".
Cliquez sur le bouton Avancé.
Ensemble de Script de suppression et de création de Script de CHUTE.
Ensemble de Script de Clés Étrangères pour Vrai.
Cliquez sur OK.
Cliquez sur Suivant -> Next -> Finition.
Vue du script, puis Exécuter.
Si vous laissez tomber le "enfant" table d'abord, la clé étrangère sera abandonnée. Si vous essayez de déplacer le "parent" table d'abord, vous obtiendrez un "ne Peut pas supprimer l'objet 'a', car il est référencé par une contrainte de CLÉ ÉTRANGÈRE." erreur.
Voici une autre façon de laisser tomber toutes les tables correctement, à l'aide de
sp_MSdropconstraints
procédure. Le plus court code que je pouvais penser:Si c'est SQL Server, vous devez supprimer la contrainte avant de pouvoir supprimer la table.
Légèrement plus de la version générique de ce @mark_s posté, cela m'a aidé
il suffit de brancher votre nom de la table, et exécuter la suite de cela.
Voici une autre façon de faire supprimer toutes les contraintes suivie par les tableaux eux-mêmes, à l'aide d'une concaténation truc impliquant
FOR XML PATH('')
qui permet la fusion de plusieurs lignes d'entrée dans une ligne de sortie. Devrait fonctionner sur n'importe quoi SQL 2005 & plus tard.J'ai quitté les EXÉCUTER des commandes commenté pour la sécurité.
Voici un script complet pour mettre en œuvre une solution:
Puis c'est beaucoup plus facile d'abandonner la totalité de la base de données:
À l'aide de SQL Server Manager vous pouvez supprimer les contraintes de clé étrangère à partir de l'INTERFACE utilisateur. Si vous souhaitez supprimer la table
Diary
mais l'Utilisateur table a une clé étrangèreDiaryId
pointant vers leDiary
table, vous pouvez étendre (en utilisant le symbole de plus) laUser
table, puis développez leForeign Keys
section. Clic droit sur la clé étrangère qui pointe vers le journal intime de la table, puis sélectionnezDelete
. Vous pouvez ensuite développer laColumns
section, clic droit et supprimer la colonneDiaryId
trop. Ensuite, il vous suffit d'exécuter:Je sais que votre question est à propos de la suppression de toutes les tables, de sorte que cela peut ne pas être utile dans ce cas. Cependant, si vous souhaitez supprimer un quelques tables c'est utile, je crois (le titre ne mentionne pas explicitement la suppression de toutes les tables).
Si vous êtes sur un serveur mysql et si cela ne vous dérange pas de perdre vos tables, vous pouvez utiliser une requête simple pour supprimer plusieurs tables à la fois:
De cette manière, il n'a pas d'importance dans quel ordre vous utilisez la table dans votre requête.
Si quelqu'un va dire quelque chose sur le fait que ce n'est pas une bonne solution si vous avez une base de données avec de nombreux tableaux: je suis d'accord!
Incorrect syntax near '='. (102) (SQLExecDirectW)
foreign_key_checks
ne fonctionnera pas sur MSSQL server. Je pense que c'est une base de données MySql variable spécifique.Si vous voulez
DROP
une table qui a été référencé par d'autres de la table à l'aide de la clé étrangère d'utilisationDROP TABLE *table_name* CASCADE CONSTRAINTS;
Je pense que cela devrait fonctionner pour vous.
cascade constraints
dans sql server