Wie kann ich alle Fremdschlüsselabhängigkeiten in einer bestimmten Spalte finden?
Was sind die verschiedenen Alternativen (grafisch in SSMS, Abfragen / Ansichten in SQL Server, Datenbank-Tools von Drittanbietern, Code in .NET)?
.net
sql-server
foreign-keys
Sogar Mien
quelle
quelle
Versuchen:
sp_help [table_name]
Sie erhalten alle Informationen zur Tabelle, einschließlich aller Fremdschlüssel
quelle
sp_fkeys [table]
sp_fkeys @fktable_name='TableName'
Wenn Sie eine Tabelle oder Spalte löschen oder umbenennen möchten, reicht es möglicherweise nicht aus, nur Fremdschlüsselabhängigkeiten zu finden.
Referenzieren von Tabellen, die nicht mit einem Fremdschlüssel verbunden sind - Sie müssen auch nach Referenziertabellen suchen, die möglicherweise nicht mit einem Fremdschlüssel verbunden sind (ich habe viele Datenbanken mit schlechtem Design gesehen, für die keine Fremdschlüssel definiert wurden, für die jedoch verwandte Daten vorhanden waren ). Die Lösung könnte darin bestehen, in allen Tabellen nach Spaltennamen zu suchen und nach ähnlichen Spalten zu suchen.
Andere Datenbankobjekte - dies ist wahrscheinlich ein wenig vom Thema entfernt, aber wenn Sie nach allen Referenzen gesucht haben, ist es auch wichtig, nach abhängigen Objekten zu suchen.
GUI-Tools - Probieren Sie die SSMS-Option "Verwandte Objekte suchen" oder Tools wie ApexSQL Search (kostenloses Tool, integriert in SSMS) aus, um alle abhängigen Objekte einschließlich der mit dem Fremdschlüssel verbundenen Tabellen zu identifizieren.
quelle
Da Ihre Frage auf eine einzelne Tabelle ausgerichtet ist, können Sie Folgendes verwenden:
Ich habe es auf SO hier gefunden:
https://stackoverflow.com/a/12956348/652519
Ich fand die Informationen, die ich brauchte, ziemlich schnell. Es listet die Tabelle, Spalte und den Namen des Fremdschlüssels auf.
BEARBEITEN
Hier ist ein Link zur Dokumentation, in der die verschiedenen Parameter aufgeführt sind, die verwendet werden können: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-fkeys-transact-sql
quelle
Ich denke, dieses Skript ist weniger teuer:
quelle
Eine, die ich sehr gerne benutze, heißt SQL Dependency Tracker von Red Gate Software . Sie können beliebige Datenbankobjekte wie Tabellen, gespeicherte Prozeduren usw. einfügen. Anschließend werden automatisch die Beziehungslinien zwischen allen anderen Objekten gezeichnet, die auf Ihren ausgewählten Elementen basieren.
Gibt eine sehr gute grafische Darstellung der Abhängigkeiten in Ihrem Schema.
quelle
Vielen Dank an John Sansom, seine Anfrage ist großartig!
Zusätzlich: Sie sollten am Ende Ihrer Abfrage "AND PT.ORDINAL_POSITION = CU.ORDINAL_POSITION" hinzufügen.
Wenn Sie mehrere Felder im Primärschlüssel haben, stimmt diese Anweisung mit den entsprechenden Feldern überein (ich hatte den Fall, dass Ihre Abfrage alle Kombinationen erstellt hat, sodass ich für 2 Felder im Primärschlüssel 4 Ergebnisse für den entsprechenden Fremdschlüssel hatte). .
(Entschuldigung, ich kann Johns Antwort nicht kommentieren, da ich nicht genug Reputationspunkte habe).
quelle
Diese Abfrage gibt Details zu Fremdschlüsseln in einer Tabelle zurück und unterstützt mehrere Spaltenschlüssel.
quelle
Nach langer Suche fand ich eine funktionierende Lösung. Meine Datenbank verwendet nicht die sys.foreign_key_columns und die information_schema.key_column_usage enthält nur Primärschlüssel.
Ich benutze SQL Server 2015
LÖSUNG 1 (selten verwendet)
Wenn andere Lösungen nicht funktionieren, funktioniert dies einwandfrei:
LÖSUNG 2 (häufig verwendet)
In den meisten Fällen funktioniert dies einwandfrei:
quelle
Sie können INFORMATION_SCHEMA.KEY_COLUMN_USAGE und sys.foreign_key_columns verwenden, um die Fremdschlüssel-Metadaten für eine Tabelle abzurufen, z. B. den Namen der Einschränkung, die Referenztabelle und die Referenzspalte usw.
Unten ist die Abfrage:
quelle
Nur eine Notiz für @ "John Sansom" Antwort,
Wenn die Fremdschlüsselabhängigkeiten gesucht werden, sollte die PT Where-Klausel meiner Meinung nach lauten:
und es ist die EIN- Bedingung:
Da häufig der Primärschlüssel der Fremdtabelle verwendet wird, wurde dieses Problem meines Erachtens bisher nicht bemerkt.
quelle
Es wird dir geben:
Das FK selbst Schema, zu dem das FK gehört
quelle
USE information_schema;
quelle