Możesz użyć OBJECTPROPERTY()
funkcji w SQL Server, aby sprawdzić, czy tabela ma co najmniej jedno ograniczenie klucza obcego.
Aby to zrobić, przekaż identyfikator obiektu tabeli jako pierwszy argument, a TableHasForeignKey
jako drugi argument. Funkcja zwraca 1
lub 0
w zależności od tego, czy ma ograniczenie klucza obcego.
Zwracana wartość 1
oznacza, że tabela działa mieć ograniczenie klucza obcego i wartość 0
oznacza, że nie. Zwracana wartość 1
ma zastosowanie niezależnie od tego, ile kluczy obcych ma tabela (o ile ma co najmniej jeden).
Jeśli chcesz mieć aktualną listę kluczy obcych, zobacz Lista wszystkich kluczy obcych w tabeli w SQL Server.
Przykład 1 – Podstawowe użycie
Oto krótki przykład do zademonstrowania.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1493580359, 'TableHasForeignKey') AS [TableHasForeignKey];
Wynik:
+----------------------+ | TableHasForeignKey | |----------------------| | 1 | +----------------------+
W tym przypadku WideWorldImportersDW baza danych zawiera tabelę z podanym identyfikatorem i ma ograniczenie klucza obcego.
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('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];
Wynik:
+----------------------+ | TableHasForeignKey | |----------------------| | 1 | +----------------------+
Jest to ten sam obiekt z poprzedniego przykładu.
Tutaj znowu jest z wyjściem ID osobno.
SELECT OBJECT_ID('Fact.Order') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];
Wynik:
+-------------+----------------------+ | Object ID | TableHasForeignKey | |-------------+----------------------| | 1493580359 | 1 | +-------------+----------------------+
Przykład 3 – gdy tabela NIE ma klucza obcego
Oto, co się dzieje, gdy tabela nie ma klucza obcego.
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignKey') AS [TableHasForeignKey];
Wynik:
+----------------------+ | TableHasForeignKey | |----------------------| | 0 | +----------------------+
W tym przypadku obiektem jest tabela, po prostu nie ma klucza obcego.
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'), 'TableHasForeignKey') AS [TableHasForeignKey];
Wynik:
+----------------------+ | TableHasForeignKey | |----------------------| | 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'), 'TableHasForeignKey') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasForeignKey') 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 jeśli nie masz uprawnień do przeglądania obiektu.