Możesz użyć OBJECTPROPERTY()
funkcji w SQL Server, aby dowiedzieć się, czy obiekt jest kluczem obcym.
Aby dowiedzieć się, czy obiekt jest kluczem obcym, przekaż identyfikator obiektu jako pierwszy argument, a IsForeignKey
jako drugi argument. Funkcja zwraca 1
lub 0
w zależności od tego, czy jest to klucz obcy.
Zwracana wartość 1
oznacza, że jest klucz obcy i wartość 0
oznacza, że tak nie jest.
Przykład 1 – Podstawowe użycie
Oto krótki przykład do zademonstrowania.
USE Music; SELECT OBJECTPROPERTY(981578535, 'IsForeignKey') AS [IsForeignKey];
Wynik:
+----------------+ | IsForeignKey | |----------------| | 1 | +----------------+
W tym przypadku Muzyka baza danych zawiera obiekt z podanym identyfikatorem i jest to klucz obcy.
Przykład 2 – Uzyskanie identyfikatora obiektu
Jeśli znasz nazwę obiektu, ale nie znasz jego identyfikatora, możesz użyć OBJECT_ID()
funkcja do pobrania identyfikatora na podstawie jego nazwy.
Przykład:
SELECT OBJECTPROPERTY(OBJECT_ID('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];
Wynik:
+----------------+ | IsForeignKey | |----------------| | 1 | +----------------+
W tym przypadku sprawdziłem ten sam obiekt z poprzedniego przykładu.
Tutaj znowu jest z wyjściem ID oddzielnie.
SELECT OBJECT_ID('FK_Albums_Artists') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];
Wynik:
+-------------+----------------+ | Object ID | IsForeignKey | |-------------+----------------| | 981578535 | 1 | +-------------+----------------+
Przykład 3 – gdy obiekt NIE jest kluczem obcym
Oto, co się dzieje, gdy obiekt nie jest kluczem obcym.
SELECT OBJECTPROPERTY(1525580473, 'IsForeignKey') AS [IsForeignKey];
Wynik:
+----------------+ | IsForeignKey | |----------------| | 0 | +----------------+
W takim przypadku baza danych tak w rzeczywistości mam obiekt o tym identyfikatorze, ale w rzeczywistości obiekt jest widokiem, więc otrzymuję wynik negatywny.
Tutaj znowu używamy OBJECT_ID()
.
SELECT OBJECT_ID('RockAlbums') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsForeignKey') AS [IsForeignKey], OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsView') AS [IsView];
Wynik:
+-------------+----------------+----------+ | Object ID | IsForeignKey | IsView | |-------------+----------------+----------| | 1525580473 | 0 | 1 | +-------------+----------------+----------+
W tym przypadku sprawdziłem również, czy obiekt jest widokiem, a wynik jest pozytywny.
Przykład 4 – 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'), 'IsForeignKey') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsForeignKey') 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.