J'ai besoin de supprimer une table hautement référencée dans une base de données SQL Server. Comment puis-je obtenir une liste de toutes les contraintes de clé étrangère que je devrai supprimer pour supprimer la table?
(SQL répond préférable à un clic sur dans l'interface graphique du studio de gestion.)
sql
sql-server
tsql
chillitom
la source
la source
Réponses:
Je ne sais pas pourquoi personne n'a suggéré mais j'utilise
sp_fkeys
pour interroger des clés étrangères pour une table donnée:Vous pouvez également spécifier le schéma:
Sans spécifier le schéma, les documents indiquent ce qui suit:
la source
J'utiliserais la fonctionnalité de création de diagrammes de base de données dans SQL Server Management Studio, mais puisque vous l'avez exclu - cela a fonctionné pour moi dans SQL Server 2008 (ne pas avoir 2005).
Pour obtenir la liste des noms de table et de colonne référents ...
Pour obtenir les noms des contraintes de clé étrangère
la source
Cela vous donne:
Code ci-dessous:
la source
order by
: KeyTableSchemaName, KeyTableName, KeyColumnName, FkTableSchemaName, FkTableName, FkName et f) modifiez l'ordre des colonnes en: KeyTableSchemaName, KeyTableName, KeyColumnName, FkTableSchemaName, FkTableName, FkName, FkColumnName, a / b Meilleure cohérence conventions et d / e pour l'utilisation la plus probable (liste des dépendants FK de aTable
).Essaye ça :
la source
Vous devez également faire attention aux références à d'autres objets.
Si la table était hautement référencée par d'autres tables, elle est probablement également fortement référencée par d'autres objets tels que les vues, les procédures stockées, les fonctions et plus encore.
Je recommanderais vraiment un outil GUI tel que la boîte de dialogue `` Afficher les dépendances '' dans SSMS ou un outil gratuit comme ApexSQL Search pour cela, car la recherche de dépendances dans d'autres objets peut être source d'erreurs si vous ne voulez le faire qu'avec SQL.
Si SQL est la seule option, vous pouvez essayer de le faire comme ceci.
la source
La question d'origine demandait d'obtenir une liste de toutes les clés étrangères dans une table hautement référencée afin que la table puisse être supprimée.
Cette petite requête renvoie toutes les commandes de «suppression de clé étrangère» nécessaires pour supprimer toutes les clés étrangères dans une table particulière:
Exemple de sortie:
Omettez la clause WHERE pour obtenir les commandes de dépôt pour toutes les clés étrangères dans la base de données actuelle.
la source
Voici le code SQL que j'utiliserais.
Ce n'est pas particulièrement clair SQL, alors regardons un exemple.
Donc, en supposant que je voulais supprimer la
Employees
table dans laNorthwind
base de données bien-aimée de Microsoft , mais SQL Server m'a dit qu'une ou plusieurs clés étrangères m'empêchaient de le faire.La commande SQL ci-dessus retournerait ces résultats ...
Cela me montre qu'il y a 3 clés étrangères qui font référence à la
Employees
table. En d'autres termes, je ne serais pas autorisé à supprimer (supprimer) ce tableau jusqu'à ce que ces trois clés étrangères soient supprimées pour la première fois.Dans les résultats, la première ligne indique comment la contrainte de clé étrangère suivante serait affichée dans les résultats.
L'avant-dernière colonne montre la commande SQL que je devrais utiliser pour supprimer l' une de ces clés étrangères, par exemple:
... et la colonne de droite montre le SQL pour le créer ...
Avec toutes ces commandes, vous avez tout ce dont vous avez besoin pour supprimer les clés étrangères pertinentes pour vous permettre de supprimer une table, puis de les recréer plus tard.
Phew. J'espère que cela t'aides.
la source
la source
La plus simple consiste à utiliser sys.foreign_keys_columns en SQL. Ici, le tableau contient les ID d'objet de toutes les clés étrangères par rapport à leur ID de colonne référencée ID de table référencée ainsi que les colonnes et les tables de référence. Comme l'ID reste constant, le résultat sera fiable pour d'autres modifications dans le schéma ainsi que dans les tableaux.
Requete:
Nous pouvons également ajouter un filtre en utilisant «où»
la source
la source
J'utilise ce script pour trouver tous les détails liés à la clé étrangère. J'utilise INFORMATION.SCHEMA. Voici un script SQL:
la source
Première
Utilisez ensuite NimbleText pour jouer avec vos résultats
la source
Quelques bonnes réponses ci-dessus. Mais je préfère avoir la réponse avec une seule requête. Ce morceau de code est extrait de sys.sp_helpconstraint (sys proc)
C'est la façon dont Microsoft recherche s'il y a des clés étrangères associées à la table.
La réponse ressemblera à ceci: test_db_name.dbo.Account: FK_Account_Customer
la source
select db_name() + '.' + schema_name(ObjectProperty(parent_object_id,'schemaid')) + '.' + object_name(parent_object_id) + ': ' + object_name(object_id) AS "FK Reference" from sys.foreign_keys where referenced_object_id = object_id('Customer')
Si vous voulez obtenir la relation de clé étrangère de toutes les tables, excluez la
where
clause sinon écrivez votre nom de table au lieu detablename
la source
Cela ne montre la relation que s'il s'agit de contraintes de clé étrangère. Ma base de données est apparemment antérieure à la contrainte FK.Certaines tables utilisent des déclencheurs pour appliquer l'intégrité référentielle, et parfois il n'y a rien d'autre qu'une colonne de même nom pour indiquer la relation (et aucune intégrité référentielle du tout).
Heureusement, nous avons une scène de nommage cohérente, je suis donc en mesure de trouver des tables de référence et des vues comme celle-ci:
J'ai utilisé cette sélection comme base pour générer un script qui fait ce que je dois faire sur les tables associées.
la source
En travaillant sur ce que @Gishu a fait, j'ai pu produire et utiliser le SQL suivant dans SQL Server 2005
Qui affiche les tables, les colonnes et les noms de clé étrangère dans une seule requête.
la source
Déterminer les clés primaires et les clés uniques de toutes les tables d'une base de données ...
Cela devrait lister toutes les contraintes et à la fin vous pouvez mettre vos filtres
Pour référence, veuillez lire à travers - http://blogs.msdn.com/b/sqltips/archive/2005/09/16/469136.aspx
la source
Je l'utilise depuis 2008 et plus. Il est similaire à d'autres solutions répertoriées, mais les noms de champ sont correctement encadrés pour gérer les classements spécifiques à la casse (LatBin). De plus, vous pouvez lui donner un nom de table unique et récupérer uniquement les informations de cette table.
la source
Il y a comment obtenir le compte de toutes les responsabilités pour l'ID sélectionné. Modifiez simplement la valeur @dbTableName, la valeur @dbRowId et son type (si vous devez supprimer '' à la ligne no 82 (..SET @SQL = ..)). Prendre plaisir.
la source
Le serveur Mysql a la
information_schema.REFERENTIAL_CONSTRAINTS
table FYI, vous pouvez le filtrer par nom de table ou nom de table référencé.la source
Liste de toutes les clés étrangères référençant une table donnée dans SQL Server:
Vous pouvez obtenir le nom de la table de référence et le nom de la colonne via la requête suivante ...
Et capture d'écran suivante pour votre compréhension ...
la source
Cela obtient n'importe quelle clé étrangère qui implique la table choisie. * Suppose un format _FIRSTABLENAME_SECONDTABLENAME.
Il s'agit d'une forme plus générale:
la source
La solution suivante fonctionne pour moi:
la source
Vous pouvez trouver à travers la requête ci-dessous:
la source
Essayez aussi.
avec
sp_fkeys
vous peut filtrer le résultat non seulement par le nom et le schéma de la table pk, mais aussi par le nom et le schéma de la table fk. lienla source
Réponse la plus préférable de @BankZ
en plus pour un schéma différent
la source