Muszę usunąć tabelę o dużym odwołaniu w bazie danych SQL Server. Jak mogę uzyskać listę wszystkich ograniczeń klucza obcego, które muszę usunąć, aby upuścić tabelę?
(Preferowane są odpowiedzi SQL zamiast klikania w interfejsie GUI studia zarządzania).
sql
sql-server
tsql
chillitom
źródło
źródło
Odpowiedzi:
Nie jestem pewien, dlaczego nikt nie zasugerował, ale używam
sp_fkeys
do wyszukiwania kluczy obcych dla danej tabeli:Możesz także określić schemat:
Bez określenia schematu, że docs podać następujące dane:
źródło
Używałbym funkcji Diagramowanie bazy danych w SQL Server Management Studio, ale skoro to wykluczyłeś - zadziałało to dla mnie w SQL Server 2008 (nie mam 2005).
Aby uzyskać listę odsyłających nazw tabel i kolumn ...
Aby uzyskać nazwy ograniczeń klucza obcego
źródło
To daje ci:
Kod poniżej:
źródło
order by
: KeyTableSchemaName, KeyTableName, KeyColumnName, FkTableSchemaName, FkTableName, FkName oraz f) zmień kolejność kolumn na: KeyTableSchemaName, KeyTableName, KeyColumnName, FkTableSchemaName, FkTableName / nazwa_kolekcji, nazwa_kolekcji, nazwa_kolekcji, nazwa_kolekcji, nazwa_kolekcji, nazwa_kolekcji, nazwa_kolekcji, nazwa_kolekcji, nazwa_kolekcji, nazwa_kolekcji, nazwa_kolekcji, nazwa_kolekcji, nazwa_kolekcji konwencje i d / e dla najbardziej prawdopodobnego użycia (wyszczególnienie zależnych od FK aTable
).Spróbuj tego :
źródło
Należy również pamiętać o odniesieniach do innych obiektów.
Jeśli tabela była wysoce przywoływana przez inne tabele, prawdopodobnie jest również przywoływana przez inne obiekty, takie jak widoki, procedury składowane, funkcje i wiele innych.
Naprawdę polecam narzędzie GUI, takie jak okno dialogowe „wyświetlanie zależności” w SSMS lub darmowe narzędzie, takie jak ApexSQL Wyszukaj, ponieważ wyszukiwanie zależności w innych obiektach może być podatne na błędy, jeśli chcesz to robić tylko za pomocą SQL.
Jeśli SQL jest jedyną opcją, możesz spróbować zrobić to w ten sposób.
źródło
Pierwotne pytanie zadane w celu umieszczenia listy wszystkich kluczy obcych w tabeli z dużym odwołaniem, aby można ją usunąć.
To małe zapytanie zwraca wszystkie polecenia „upuść klucz obcy” potrzebne do upuszczenia wszystkich kluczy obcych do określonej tabeli:
Przykładowe dane wyjściowe:
Pomiń klauzulę WHERE, aby uzyskać komendy drop dla wszystkich kluczy obcych w bieżącej bazie danych.
źródło
Oto kod SQL, którego bym użył.
Nie jest to szczególnie wyraźny SQL, więc spójrzmy na przykład.
Załóżmy więc, że chciałem upuścić
Employees
tabelę w ukochanejNorthwind
bazie danych Microsoftu , ale SQL Server powiedział mi, że jeden lub więcej kluczy obcych uniemożliwia mi to.Powyższe polecenie SQL zwróci te wyniki ...
Pokazuje mi, że istnieją 3 klucze obce, które odnoszą się do
Employees
tabeli. Innymi słowy, nie wolno mi było usuwać (upuszczać) tej tabeli, dopóki te trzy klucze obce nie zostaną najpierw usunięte.W wynikach pierwszy wiersz pokazuje, jak następujące ograniczenie klucza obcego zostanie pokazane w wynikach.
Przedostatnia kolumna pokazuje polecenie SQL, którego musiałbym użyć, aby usunąć jeden z tych kluczy obcych, np .:
... a prawa kolumna pokazuje SQL, aby go utworzyć ...
Dzięki wszystkim tym poleceniom masz wszystko, czego potrzebujesz, aby usunąć odpowiednie klucze obce, aby umożliwić usunięcie tabeli, a następnie odtworzenie ich później.
Uff Mam nadzieję że to pomoże.
źródło
źródło
Najprostszym z nich jest użycie sys.foreign_keys_columns w SQL. W tabeli znajdują się identyfikatory obiektów wszystkich kluczy obcych zapisane w identyfikatorze kolumny z odnośnikiem Identyfikator tabeli z referencją, a także kolumny i tabele z odnośnikami. Ponieważ identyfikator pozostaje stały, wynik będzie wiarygodny dla dalszych modyfikacji schematu, a także tabel.
Pytanie:
Możemy również dodać filtr, używając „gdzie”
źródło
źródło
Używam tego skryptu, aby znaleźć wszystkie szczegóły związane z kluczem obcym. Używam INFORMACJE. SCHEMAT. Poniżej znajduje się skrypt SQL:
źródło
Pierwszy
Następnie użyj NimbleText, aby zagrać z wynikami
źródło
Kilka dobrych odpowiedzi powyżej. Ale wolę mieć odpowiedź za pomocą jednego zapytania. Ten fragment kodu pochodzi z sys.sp_helpconstraint (sys proc)
W ten sposób Microsoft sprawdza, czy z tbl są powiązane klucze obce.
Odpowiedź będzie wyglądać następująco: test_db_name.dbo.Konto: FK_Account_Customer
źródło
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')
Jeśli chcesz uzyskać relację klucza obcego we wszystkich tabelach, wyklucz
where
klauzulę, zamiast tego wpisz tablenametablename
źródło
Pokazuje to związek tylko wtedy, gdy są ograniczeniami klucza obcego. Moja baza danych najwyraźniej wyprzedza ograniczenie FK. Niektóre wyzwalacze używają tabeli do wymuszania integralności referencyjnej, a czasami nie ma nic oprócz kolumny o podobnej nazwie wskazującej związek (i żadnej integralności referencyjnej w ogóle).
Na szczęście mamy spójną scenę nazewnictwa, więc jestem w stanie znaleźć tabele odwołań i widoki takie jak to:
Użyłem tego wyboru jako podstawy do wygenerowania skryptu, który robi to, co muszę zrobić na powiązanych tabelach.
źródło
Pracując nad tym, co zrobił @Gishu, byłem w stanie stworzyć i używać następującego SQL w SQL Server 2005
Który Wyświetla nazwy tabel, kolumn i kluczy obcych w jednym zapytaniu.
źródło
Określ klucze podstawowe i klucze unikatowe dla wszystkich tabel w bazie danych ...
To powinno wymieniać wszystkie ograniczenia, a na końcu możesz umieścić swoje filtry
W celach informacyjnych przeczytaj - http://blogs.msdn.com/b/sqltips/archive/2005/09/16/469136.aspx
źródło
Korzystałem z tego od 2008 roku. Jest podobny do niektórych innych wymienionych rozwiązań, ale nazwy pól są odpowiednio oznaczone, aby obsłużyć sortowanie według wielkości liter (LatBin). Dodatkowo możesz podać jedną nazwę tabeli i pobrać tylko informacje o tej tabeli.
źródło
Istnieje sposób obliczenia wszystkich obowiązków dla wybranego identyfikatora. Po prostu zmień wartość @dbTableName, wartość @dbRowId i jej typ (jeśli int musisz usunąć '' w linii nr 82 (.. SET @SQL = ..)). Cieszyć się.
źródło
Serwer MySQL ma
information_schema.REFERENTIAL_CONSTRAINTS
tabelę FYI, możesz ją filtrować według nazwy tabeli lub nazwy tabeli, do której istnieje odwołanie.źródło
Lista wszystkich kluczy obcych odnoszących się do danej tabeli w SQL Server:
Nazwę tabeli referencyjnej i nazwę kolumny można uzyskać, wykonując następujące zapytanie ...
I poniższy zrzut ekranu do zrozumienia ...
źródło
Otrzymuje dowolny klucz obcy, który dotyczy wybranej tabeli. * Przyjmuje format _FIRSTABLENAME_SECONDTABLENAME.
To jest bardziej ogólna forma:
źródło
Następujące rozwiązanie działa dla mnie:
źródło
Poniżej znajdziesz zapytanie:
źródło
Spróbuj także.
z
sp_fkeys
was mogą filtrować wyniki, nie tylko pk nazwy tabeli i schematu, ale również z fk nazwy tabeli i schematu. połączyćźródło
Najkorzystniejsza odpowiedź @BankZ
dodatkowo dla innego schematu
źródło