Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Проверете дали дадена таблица се препраща от външен ключ в SQL Server с OBJECTPROPERTY()

Можете да използвате OBJECTPROPERTY() функция в SQL Server, за да провери дали дадена таблица е реферирана от външен ключ.

За да направите това, предайте идентификатора на обекта на таблицата като първи аргумент и TableHasForeignRef като втори аргумент. Функцията връща 1 или 0 в зависимост от това дали е посочен от външен ключ или не.

Връщана стойност на 1 означава, че таблицата е посочен от външен ключ и стойност 0 означава, че не е.

Имайте предвид, че представените тук примери не изброяват външните ключове или техните таблици или нещо подобно. Те просто връщат стойност true/false, която можете да използвате, за да тествате дали дадена таблица е препраткана от външен ключ. Ако трябва да изброите всички външни ключове, които препращат към дадена таблица, вижте Връщане на всички външни ключове, които препращат към дадена таблица в SQL Server. Примерите в тази статия изброяват всеки външен ключ, както и таблицата/ите с външни ключове и таблицата с първичен ключ.

Пример 1 – Основна употреба

Ето един бърз пример за демонстрация.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1141579105, 'TableHasForeignRef') AS [TableHasForeignRef];

Резултат:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 1                    |
+----------------------+

В този случай WideWorldImportersDW базата данни има таблица с предоставения идентификатор и се препраща от външен ключ.

Пример 2 – Получаване на идентификатора на обекта

Ако знаете името на таблицата, но не и нейния идентификатор, можете да използвате OBJECT_ID() функция за извличане на идентификатора въз основа на неговото име.

Пример:

SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];

Резултат:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 1                    |
+----------------------+

Това е същият обект от предишния пример.

Ето го отново с отделно извеждане на ID.

SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];

Резултат:

+-------------+----------------------+
| Object ID   | TableHasForeignRef   |
|-------------+----------------------|
| 1013578649  | 1                    |
+-------------+----------------------+

Пример 3 – Когато таблицата НЕ се препраща от външен ключ

Ето какво се случва, когато таблицата не е посочена от външен ключ.

SELECT OBJECTPROPERTY(OBJECT_ID('Integration.Lineage'), 'TableHasForeignRef') AS [TableHasForeignRef];

Резултат:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 0                    |
+----------------------+

В този случай обектът е таблица, просто не е препратен от външен ключ.

Пример 4 – Когато обектът не е таблица

Ето какво се случва, когато базата данни съдържа обект с идентификатор, но този обект не е таблица.

SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignRef') AS [TableHasForeignRef];

Резултат:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| NULL                 |
+----------------------+

Пример 5 – Обектът не съществува

SQL Server приема, че идентификаторът на обекта е в текущия контекст на базата данни. Ако подадете идентификатор на обект от друга база данни, или ще получите резултат NULL, или ще получите неправилни резултати.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasForeignRef') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasForeignRef') AS [12345678];

Резултат:

+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| NULL            | NULL       |
+-----------------+------------+

В този случай базата данни не съдържа обекти с това име или ID и така получавам резултат NULL.

Освен това ще получите NULL при грешка или ако нямате разрешение да видите обекта.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е разликата между CHAR и VARCHAR в SQL Server - SQL Server / T-SQL урок, част 31

  2. Диагностициране на застой в SQL Server 2005

  3. Как да направите изтриване на преминаваща заявка в SQL Server

  4. Как да напиша UPDATE SQL с псевдоним на таблица в SQL Server 2008?

  5. Научете дизайн на база данни със SQL Server Management Studio (SSMS) – част 2