Poniższe zapytanie pomoże Ci zacząć. Zawiera listę wszystkich relacji z kluczami zagranicznymi w bieżącej bazie danych.
SELECT
FK_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT
i1.TABLE_NAME,
i2.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE
i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT
ON PT.TABLE_NAME = PK.TABLE_NAME
Relacje można również wyświetlać graficznie w programie SQL Server Management Studio w ramach diagramów baz danych.
próbować:
sp_help [table_name]
otrzymasz wszystkie informacje o tabeli, w tym wszystkie klucze obce
źródło
sp_fkeys [table]
sp_fkeys @fktable_name='TableName'
Jeśli planujesz usunąć lub zmienić nazwę tabeli lub kolumny, znalezienie tylko zależności klucza obcego może nie wystarczyć.
Odwoływanie się do tabel niezwiązanych z kluczem obcym - Będziesz także musiał wyszukać tabele odwołań, które mogą nie być połączone z kluczem obcym (widziałem wiele baz danych o złym projekcie, które nie mają zdefiniowanych kluczy obcych, ale mają powiązane dane ). Rozwiązaniem może być wyszukanie nazwy kolumny we wszystkich tabelach i poszukanie podobnych kolumn.
Inne obiekty bazy danych - to prawdopodobnie trochę nie na temat, ale jeśli szukałeś wszystkich referencji, ważne jest również, aby sprawdzić zależne obiekty.
Narzędzia GUI - Wypróbuj opcję „Znajdź powiązane obiekty” programu SSMS lub narzędzia, takie jak ApexSQL Search (bezpłatne narzędzie, integruje się z SSMS), aby zidentyfikować wszystkie zależne obiekty, w tym tabele powiązane z kluczem obcym.
źródło
Ponieważ Twoje pytanie dotyczy jednej tabeli, możesz użyć tego:
Znalazłem to na SO tutaj:
https://stackoverflow.com/a/12956348/652519
Dość szybko znalazłem potrzebne informacje. Zawiera tabelę, kolumnę i nazwę klucza obcego.
EDYTOWAĆ
Oto link do dokumentacji, w której wyszczególniono różne parametry, których można użyć: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-fkeys-transact-sql
źródło
Myślę, że ten skrypt jest tańszy:
źródło
Ten, którego naprawdę lubię używać, nazywa się SQL Dependency Tracker firmy Red Gate Software . Możesz umieścić dowolne obiekty bazy danych, takie jak tabele, procedury składowane itp., A następnie automatycznie narysuje linie relacji między wszystkimi innymi obiektami, które opierają się na wybranych elementach.
Daje bardzo dobrą graficzną reprezentację zależności w twoim schemacie.
źródło
Wielkie dzięki dla Johna Sansoma, jego zapytanie jest wspaniałe!
Ponadto: na końcu zapytania należy dodać „AND PT.ORDINAL_POSITION = CU.ORDINAL_POSITION”.
Jeśli masz wiele pól w kluczu podstawowym, ta instrukcja dopasuje do siebie odpowiednie pola (miałem przypadek, twoje zapytanie utworzyło wszystkie kombinacje, więc dla 2 pól w kluczu podstawowym miałem 4 wyniki dla odpowiedniego klucza obcego) .
(Przepraszam, że nie mogę skomentować odpowiedzi Johna, ponieważ nie mam wystarczającej liczby punktów reputacji).
źródło
To zapytanie zwróci szczegóły dotyczące kluczy obcych w tabeli, obsługuje wiele kluczy kolumn.
źródło
Po długich poszukiwaniach znalazłem działające rozwiązanie. Moja baza danych nie używa sys.foreign_key_columns, a information_schema.key_column_usage zawiera tylko klucze podstawowe.
Używam SQL Server 2015
ROZWIĄZANIE 1 (rzadko używane)
Jeśli inne rozwiązania nie działają, to będzie działać dobrze:
ROZWIĄZANIE 2 (powszechnie używane)
W większości przypadków zadziała to dobrze:
źródło
Możesz użyć INFORMATION_SCHEMA.KEY_COLUMN_USAGE i sys.foreign_key_columns, aby uzyskać metadane klucza obcego dla tabeli, tj. Nazwę ograniczenia, tabelę referencyjną i kolumnę referencyjną itp.
Poniżej znajduje się zapytanie:
źródło
Tylko uwaga do odpowiedzi @ „John Sansom”,
Jeśli szukane są zależności klucza obcego , myślę, że klauzula PT Where powinna być:
i jest włączony stan:
Ponieważ powszechnie używany jest klucz podstawowy tabeli obcej, myślę, że ten problem nie został wcześniej zauważony.
źródło
To da ci:
Sam FK Schemat, do którego należy FK
źródło
UŻYJ schematu information_schema;
źródło