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

Sprawdź, czy do tabeli odwołuje się klucz obcy w SQL Server za pomocą OBJECTPROPERTY()

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nawiasy klamrowe w T-SQL

  2. Przechowywana procedura i uprawnienia — czy WYKONANIE wystarczy?

  3. SQL Server:Przykłady danych ciągu PIVOTing

  4. Dlaczego tworzysz widok w bazie danych?

  5. 5 składni SQL i zasad zapytań dla lepszego monitorowania baz danych