Próbuję usunąć tabelę, ale pojawia się następujący komunikat:
Msg 3726, poziom 16, stan 1, wiersz 3
Nie można usunąć obiektu „dbo.UserProfile”, ponieważ odwołuje się do niego ograniczenie FOREIGN KEY.
Msg 2714, poziom 16, stan 6, wiersz 2
W bazie danych istnieje już obiekt o nazwie „UserProfile”.
Rozejrzałem się po SQL Server Management Studio, ale nie mogę znaleźć ograniczenia. Jak mogę znaleźć ograniczenia klucza obcego?
sql
sql-server
sql-server-2008
marc_s
źródło
źródło
Worth noticing:
Odpowiedź @LittleSweetSeas zwróci informacje o kluczach obcych dla danej tabeli , do której się odwołujemy , natomiast szczegóły odpowiedzi @ Gayathri-Varma dla danej tabeli nadrzędnej . Oba są przydatne w innym kontekście i obaj wygrywają swój własny wyścig :-)Odpowiedzi:
Oto ona:
W ten sposób otrzymasz odwołanie do tabeli i nazwę kolumny.
Edytowano, aby używać sys.tables zamiast ogólnych sys.objects zgodnie z sugestią komentarza. Dzięki, marc_s
źródło
sys.tables
niżsys.objects
INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id
zINNER JOIN sys.tables t ON t.OBJECT_ID = fc.referenced_object_id
Innym sposobem jest sprawdzenie wyników
(lub po prostu zaznacz cytowaną nazwę TableName i naciśnij ALT + F1)
Z biegiem czasu zdecydowałem się po prostu zawęzić odpowiedź. Poniżej znajduje się zrzut ekranu przedstawiający wyniki
sp_help
. W tym przykładzie wykorzystano bazę danych AdventureWorksDW2012. Jest tam wiele dobrych informacji, a to, czego szukamy, znajduje się na samym końcu - zaznaczone na zielono:źródło
Spróbuj tego
źródło
name
zwracana wartość jest nazwą wewnętrzną (myślę), a nie rzeczywistą nazwą kolumny w tabeli nadrzędnej. Jakiś sposób to naprawić?ParentTableName
że zawsze byłby taki sam jak dany 'Tablename
' w klauzuli where (jeśli jest uwzględniony). Może to być zamierzone i będzie bardziej przydatne w przypadku zapytań dotyczących więcej niż jednej tabeli.Uznałem, że ta odpowiedź jest dość prosta i załatwiłem to, czego potrzebowałem: https://stackoverflow.com/a/12956348/652519
Podsumowanie z linku, użyj tego zapytania:
Szybko i prosto. Udało mi się dość szybko zlokalizować wszystkie tabele kluczy obcych, odpowiednie kolumny i nazwy kluczy obcych 15 tabel.
Jak zauważył @mdisibio poniżej, oto link do dokumentacji, która zawiera szczegółowe informacje o różnych parametrach, 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
EXEC sp_fkeys 'Payroll', 'accounting'
Używam tego skryptu, aby znaleźć wszystkie szczegóły dotyczące klucza obcego. Używam INFORMATION.SCHEMA. Poniżej znajduje się skrypt SQL:
źródło
jeśli chcesz przejść przez SSMS w oknie eksploratora obiektów, kliknij prawym przyciskiem myszy obiekt, który chcesz upuścić, zobacz zależności.
źródło
Oto najlepszy sposób na znalezienie powiązania klucza obcego we wszystkich bazach danych.
i jeszcze jeden sposób
źródło
exec sp_helpconstraint 'Table Name'
jako jedyne zwraca dla mnie jakiekolwiek wiersze. Jednak nazwa przeszkody jest bełkotem.PRIMARY KEY (clustered) PK__org_soft__3213E83FE6B07364
źródło
- Poniższe informacje mogą dać ci więcej tego, czego szukasz:
źródło
Możesz również zwrócić wszystkie informacje na temat,
Foreign Keys
dostosowując odpowiedź @LittleSweetSeas:źródło
W SQL Server Management Studio wystarczy kliknąć prawym przyciskiem myszy tabelę w eksploratorze obiektów i wybrać opcję „Wyświetl zależności”. To dałoby dobry punkt wyjścia. Przedstawia tabele, widoki i procedury odwołujące się do tabeli.
źródło
spróbuj następującego zapytania.
da to ograniczenie nazwa_kolumny, nazwy_kolumn, które będą się odnosić, oraz tabele, które będą zależne od ograniczenia, będą tam.
źródło
Możesz użyć tego zapytania, aby wyświetlić
Foreign key
constaraints:Zaczerpnięte z http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table- w bazie danych /
źródło
Najłatwiejszym sposobem na zdobycie
Primary Key
iForeign Key
na stolik jest:źródło
W Eksploratorze obiektów rozwiń tabelę i rozwiń Klucze:
źródło