Comment faire pour supprimer une liste de tables SQL Server, en ignorant les contraintes?
J'ai une liste d'une demi-douzaine de MSSQL 2008 tableaux que je voudrais enlever à la fois à partir de ma base de données. Les données ont été entièrement migré vers de nouvelles tables. Il n'y a aucune référence dans le nouveau tables de la vieux tables.
Le problème étant que les anciennes tables est livré avec des charges de l'intérieur FK contraintes qui ont été générés automatiquement par un outil (aspnet_regsql en fait). D'où déposer manuellement toutes les contraintes est une vraie douleur.
Comment je peux laisser les vieilles tables en ignorant intérieure contraintes?
source d'informationauteur Joannes Vermorel
Vous devez vous connecter pour publier un commentaire.
Il dépend de la façon dont vous voulez supprimer les tables. Si la liste de tables besoin de déposer le couvre presque au-dessus de 20 % de tables dans votre base de données.
Alors je vais désactiver toutes les contraintes que DB sous mon script et déposer les tables et Activer les contraintes sous le même script.
Enfin pour vérifier l'État de vos contraintes feu jusqu'à cette Requête.
Si vous ne voulez pas désactiver les contraintes au niveau de Base de données, puis faire une liste de tables que vous souhaitez déposer.
Etape 1 : Vérifier les Contraintes associées à thos tables
Etape 2 : Désactiver les Contraintes qui sont associées à ces tables.
Etape 3 : pour supprimer les tables
Un simple
DROP TABLE dbo.Matable
ignorera toutes les contraintes (et déclencheurs), à l'exception des touches (sauf si vous déposez de l'enfant/table de référence de la première) où vous pouvez avoir à déposer ces premiers.Edit: après le commentaire:
Il n'y a pas de moyen automatique. Vous aurez à parcourir
sys.foreign_keys
et de générer des instructions ALTER TABLE.J'ai trouvé raisonnable(ish) de façon à le faire en faisant SQL écrire du SQL à la baisse les contraintes:
Vous souhaitez modifier le nom de la table pour répondre à vos besoins, ou, éventuellement, sélectionnez à l'encontre d'autres de la colonne/valeurs.
Aussi, ce serait de sélectionner non contrainte de clé primaire, ce qui pourrait être trop grand d'un marteau de forgeron. Vous devrez peut-être juste régler =?
Je ne suis pas un DBA. il peut y avoir de meilleures façons de le faire, mais cela a fonctionné assez bien pour mes besoins.
Exécutez le script suivant pour supprimer toutes les contraintes dans tous les tableaux, en vertu de l'actuel DB, puis exécutez les instructions drop table.
J'ai enfin trouvé la solution basée sur le script fourni par Jason Presley. Ce script supprime automatiquement toutes les contraintes dans la DB. Il est facile d'ajouter une clause where de sorte qu'il ne s'applique à l'ensemble des tables. Après cela, la suppression de toutes les tables est un simple.
Je soupçonne que vous avez à faire un 'modifier' de la commande sur la délinquance des tables avant la chute de supprimer le forigen clé de contraintes.
Bien sûr, si vous laissez tomber l'enfant de tableaux premier, alors vous n'aurez pas ce problème.
(sauf si vous avez de la table Une contrainte à la table B et le tableau B de la contrainte à Un, alors vous aurez besoin de Modifier l'une des tables, par exemple Un à supprimer la contrainte)
par exemple, cela ne marchera pas, puisque les Ordres a une contrainte de Order_Lines
par exemple, cela fonctionne