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

Sprawdź, czy tabela ma klucz obcy w SQL Server za pomocą OBJECTPROPERTY()

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zainstalować SQL Server na komputerze Mac z VirtualBox?

  2. Jak wyodrębnić lub przekonwertować dane czasu z ciągu w SQL Server

  3. Powiadomienie o zmianach w SQL Server 2008

  4. Dlaczego podczas nawiązywania połączenia z programem SQL Server wystąpił błąd związany z siecią lub specyficzny dla wystąpienia?

  5. Konwertuj „datetimeoffset” na „date” w SQL Server (przykłady T-SQL)