Si je veux supprimer toutes les tables de ma base de données de cette manière, prendra-t-il en charge la contrainte de clé étrangère? Sinon, comment puis-je m'en occuper en premier?
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]
Réponses:
Non, cela ne supprimera pas votre table s'il existe effectivement des clés étrangères la référençant.
Pour obtenir toutes les relations de clé étrangère faisant référence à votre table, vous pouvez utiliser ce SQL (si vous utilisez SQL Server 2005 et versions ultérieures):
et s'il y en a, avec cette instruction ici, vous pouvez créer des instructions SQL pour supprimer ces relations FK:
la source
Dans SQL Server Management Studio 2008 (R2) et plus récent, vous pouvez faire un clic droit sur le
Sélectionnez les tables que vous souhaitez SUPPRIMER.
Sélectionnez "Enregistrer dans une nouvelle fenêtre de requête".
Cliquez sur le bouton Avancé.
Définissez Script DROP et CREATE sur Script DROP.
Définissez les clés étrangères de script sur True.
Cliquez sur OK.
Cliquez sur Suivant -> Suivant -> Terminer.
Affichez le script, puis exécutez.
la source
Si vous supprimez d'abord la table «enfant», la clé étrangère sera également supprimée. Si vous essayez d'abord de supprimer la table "parent", vous obtiendrez un message "Impossible de supprimer l'objet 'a' car il est référencé par une contrainte FOREIGN KEY." Erreur.
la source
Voici une autre façon de supprimer toutes les tables correctement, en utilisant la
sp_MSdropconstraints
procédure. Le code le plus court auquel je puisse penser:la source
S'il s'agit de SQL Server, vous devez supprimer la contrainte avant de pouvoir supprimer la table.
la source
Version légèrement plus générique de ce que @mark_s a publié, cela m'a aidé
branchez simplement le nom de votre table et exécutez le résultat.
la source
Voici une autre façon de supprimer toutes les contraintes suivies par les tables elles-mêmes, en utilisant une astuce de concaténation impliquant
FOR XML PATH('')
qui permet de fusionner plusieurs lignes d'entrée en une seule ligne de sortie. Devrait fonctionner sur quoi que ce soit SQL 2005 et plus tard.J'ai laissé les commandes EXECUTE commentées pour des raisons de sécurité.
la source
Voici un script complet pour implémenter une solution:
la source
la source
À l'aide de SQL Server Manager, vous pouvez supprimer les contraintes de clé étrangère de l'interface utilisateur. Si vous souhaitez supprimer la table
Diary
mais que la table User a une clé étrangèreDiaryId
pointant vers laDiary
table, vous pouvez développer (à l'aide du symbole plus) laUser
table, puis développer laForeign Keys
section. Cliquez avec le bouton droit de la souris sur la clé étrangère qui pointe vers le tableau du journal, puis sélectionnezDelete
. Vous pouvez ensuite développer laColumns
section, cliquer avec le bouton droit de la souris et supprimer la colonneDiaryId
également. Ensuite, vous pouvez simplement exécuter:Je sais que votre question réelle concerne la suppression de toutes les tables, donc cela peut ne pas être utile dans ce cas. Cependant, si vous souhaitez simplement supprimer quelques tables, c'est utile, je pense (le titre ne mentionne pas explicitement la suppression de toutes les tables).
la source
Si vous êtes sur un serveur mysql et que cela ne vous dérange pas de perdre vos tables, vous pouvez utiliser une simple requête pour supprimer plusieurs tables à la fois:
De cette façon, l'ordre dans lequel vous utilisez la table dans votre requête n'a pas d'importance.
Si quelqu'un veut dire quelque chose sur le fait que ce n'est pas une bonne solution si vous avez une base de données avec de nombreuses tables: je suis d'accord!
la source
Incorrect syntax near '='. (102) (SQLExecDirectW)
foreign_key_checks
ne fonctionnera pas sur le serveur MSSQL. Je pense que c'est une variable spécifique à MySql.exécutez le code ci-dessous pour obtenir le nom de la contrainte de clé étrangère qui bloque votre dépôt. Par exemple, je prends la
roles
table.vous obtiendrez le nom FK comme ci-dessous:
FK__Table1__roleId__1X1H55C1
exécutez maintenant le code ci-dessous pour supprimer la référence FK obtenue par le haut.
Terminé!
la source
Ensuite, il est beaucoup plus facile de supprimer toute la base de données:
la source
Si vous voulez
DROP
une table qui a été référencée par une autre table à l'aide de la clé étrangère, utilisezDROP TABLE *table_name* CASCADE CONSTRAINTS;
Je pense que cela devrait fonctionner pour vous.
la source
cascade constraints
de serveur SQL