J'essaye de supprimer une table mais j'obtiens le message suivant:
Msg 3726, niveau 16, état 1, ligne 3
Impossible de supprimer l'objet 'dbo.UserProfile' car il est référencé par une contrainte FOREIGN KEY.
Msg 2714, niveau 16, état 6, ligne 2
Il existe déjà un objet nommé «UserProfile» dans la base de données.
J'ai regardé autour de moi avec SQL Server Management Studio mais je ne parviens pas à trouver la contrainte. Comment puis-je connaître les contraintes de clé étrangère?
sql
sql-server
sql-server-2008
marc_s
la source
la source
Worth noticing:
Answer by @LittleSweetSeas renverra des informations sur les clés étrangères POUR une table référencée donnée , cependant les détails de réponse de @ Gayathri-Varma pour une table parent donnée . Les deux sont utiles dans un contexte différent et gagnent tous les deux leur propre course :-)Réponses:
C'est ici:
De cette façon, vous obtiendrez la table de référence et le nom de la colonne.
Modifié pour utiliser sys.tables au lieu de sys.objects génériques selon la suggestion de commentaire. Merci, marc_s
la source
sys.tables
plutôt quesys.objects
INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id
parINNER JOIN sys.tables t ON t.OBJECT_ID = fc.referenced_object_id
Une autre façon consiste à vérifier les résultats de
(ou mettez simplement en surbrillance le TableName cité et appuyez sur ALT + F1)
Avec le temps, j'ai simplement décidé d'affiner ma réponse. Vous trouverez ci-dessous une capture d'écran des résultats
sp_help
fournis. A ont utilisé la base de données AdventureWorksDW2012 pour cet exemple. Il y a de nombreuses bonnes informations là-bas, et ce que nous recherchons est à la toute fin - surligné en vert:la source
Essaye ça
la source
name
valeur renvoyée est un nom interne (méthinks), et non le nom de colonne réel dans la table parent. Aucun moyen de réparer cela?ParentTableName
serait toujours le même que le donné 'Tablename
' dans la clause where (si elle est incluse). Cela peut être intentionnel et sera plus utile en cas d'interrogation pour plusieurs tables.J'ai trouvé cette réponse assez simple et j'ai fait le truc pour ce dont j'avais besoin: https://stackoverflow.com/a/12956348/652519
Un résumé du lien, utilisez cette requête:
Rapide et simple. J'ai pu localiser assez rapidement toutes les tables de clés étrangères, les colonnes respectives et les noms de clés étrangères de 15 tables.
Comme @mdisibio noté ci-dessous, voici un lien vers la documentation qui détaille les différents paramètres pouvant être utilisés: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp- fkeys-transact-sql
la source
EXEC sp_fkeys 'Payroll', 'accounting'
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
si vous voulez passer par SSMS dans la fenêtre de l'explorateur d'objets, faites un clic droit sur l'objet que vous souhaitez déposer, affichez les dépendances.
la source
Voici le meilleur moyen de découvrir la relation de clé étrangère dans toutes les bases de données.
et encore une façon
la source
exec sp_helpconstraint 'Table Name'
est la seule qui renvoie des lignes pour moi. Cependant, le nom de la contraint est charabia.PRIMARY KEY (clustered) PK__org_soft__3213E83FE6B07364
la source
- Ce qui suit peut vous donner plus de ce que vous recherchez:
la source
Vous pouvez également renvoyer toutes les informations sur la
Foreign Keys
réponse en adaptant la réponse @LittleSweetSeas:la source
Dans SQL Server Management Studio, vous pouvez simplement cliquer avec le bouton droit sur la table dans l'explorateur d'objets et sélectionner "Afficher les dépendances". Cela vous donnerait un bon point de départ. Il affiche des tables, des vues et des procédures qui font référence à la table.
la source
essayez la requête suivante.
cela donnera le nom_contrainte, les noms_colonne qui feront référence et les tables qui dépendront de la contrainte seront là.
la source
Vous pouvez utiliser cette requête pour afficher les
Foreign key
constaraints:Tiré de http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table- dans la base de données /
la source
Le moyen le plus simple d'obtenir
Primary Key
etForeign Key
pour une table est:la source
Dans l'Explorateur d'objets, développez le tableau et développez les clés:
la source