Możesz użyć OBJECTPROPERTY()
w programie SQL Server, aby sprawdzić, czy do tabeli odwołuje się klucz obcy.
Aby to zrobić, przekaż identyfikator obiektu tabeli jako pierwszy argument, a TableHasForeignRef
jako drugi argument. Funkcja zwraca 1
lub 0
w zależności od tego, czy odwołuje się do niego klucz obcy.
Zwracana wartość 1
oznacza, że tabela jest do którego odwołuje się klucz obcy i wartość 0
oznacza, że tak nie jest.
Zwróć uwagę, że przedstawione tutaj przykłady nie zawierają listy kluczy obcych ani ich tabel ani niczego w tym rodzaju. Po prostu zwracają wartość prawda/fałsz, której można użyć do sprawdzenia, czy do tabeli odwołuje się klucz obcy. Jeśli chcesz wyświetlić listę wszystkich kluczy obcych, które odwołują się do danej tabeli, zobacz Zwracanie wszystkich kluczy obcych, które odwołują się do danej tabeli w SQL Server. Przykłady w tym artykule wymieniają każdy klucz obcy, a także tabele kluczy obcych i tabelę kluczy podstawowych.
Przykład 1 – Podstawowe użycie
Oto krótki przykład do zademonstrowania.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1141579105, 'TableHasForeignRef') AS [TableHasForeignRef];
Wynik:
+----------------------+ | TableHasForeignRef | |----------------------| | 1 | +----------------------+
W tym przypadku WideWorldImportersDW baza danych zawiera tabelę z podanym identyfikatorem, do której odwołuje się klucz obcy.
Przykład 2 – Uzyskanie identyfikatora obiektu
Jeśli znasz nazwę tabeli, ale nie znasz jej identyfikatora, możesz użyć OBJECT_ID()
funkcja do pobrania identyfikatora na podstawie jego nazwy.
Przykład:
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];
Wynik:
+----------------------+ | TableHasForeignRef | |----------------------| | 1 | +----------------------+
Jest to ten sam obiekt z poprzedniego przykładu.
Tutaj znowu jest z wyjściem ID oddzielnie.
SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];
Wynik:
+-------------+----------------------+ | Object ID | TableHasForeignRef | |-------------+----------------------| | 1013578649 | 1 | +-------------+----------------------+
Przykład 3 – gdy do tabeli NIE odwołuje się klucz obcy
Oto, co się dzieje, gdy do tabeli nie odwołuje się klucz obcy.
SELECT OBJECTPROPERTY(OBJECT_ID('Integration.Lineage'), 'TableHasForeignRef') AS [TableHasForeignRef];
Wynik:
+----------------------+ | TableHasForeignRef | |----------------------| | 0 | +----------------------+
W tym przypadku obiektem jest tabela, po prostu nie odwołuje się do niego klucz obcy.
Przykład 4 – Kiedy obiekt nie jest tabelą
Oto, co się dzieje, gdy baza danych zawiera obiekt z identyfikatorem, ale ten obiekt nie jest tabelą.
SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignRef') AS [TableHasForeignRef];
Wynik:
+----------------------+ | TableHasForeignRef | |----------------------| | NULL | +----------------------+
Przykład 5 – Obiekt nie istnieje
SQL Server zakłada, że identyfikator obiektu znajduje się w bieżącym kontekście bazy danych. Jeśli przekażesz identyfikator obiektu z innej bazy danych, otrzymasz wynik NULL lub otrzymasz nieprawidłowe wyniki.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasForeignRef') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasForeignRef') AS [12345678];
Wynik:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
W tym przypadku baza danych nie zawiera obiektów o tej nazwie lub identyfikatorze, więc otrzymuję wynik NULL.
Otrzymasz również NULL w przypadku błędu lub braku uprawnień do przeglądania obiektu.