Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dowiedz się, czy obiekt jest kluczem obcym za pomocą OBJECTPROPERTY() w SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kompresuj określoną partycję w tabeli w SQL Server (T-SQL)

  2. Zapytanie SQL do pobrania danych z ostatnich 3 miesięcy

  3. Dynamiczne wykonywanie SQL w SQL Server

  4. SQL Server 2005 Używanie DateAdd do dodawania dnia do daty

  5. Kiedy muszę używać początku/końca bloków i słowa kluczowego Go w programie SQL Server?