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

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

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

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

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

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

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

USE PK_Test;
SELECT OBJECTPROPERTY(901578250, 'IsPrimaryKey') AS [IsPrimaryKey];

Резултат:

+----------------+
| IsPrimaryKey   |
|----------------|
| 1              |
+----------------+

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

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

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

Пример:

SELECT OBJECTPROPERTY(OBJECT_ID('PK_Musician'), 'IsPrimaryKey') AS [IsPrimaryKey];

Резултат:

+----------------+
| IsPrimaryKey   |
|----------------|
| 1              |
+----------------+

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

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

SELECT 
  OBJECT_ID('PK_Musician') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('PK_Musician'), 'IsPrimaryKey') AS [IsPrimaryKey];

Резултат:

+-------------+----------------+
| Object ID   | IsPrimaryKey   |
|-------------+----------------|
| 901578250   | 1              |
+-------------+----------------+

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

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

SELECT OBJECTPROPERTY(885578193, 'IsPrimaryKey') AS [IsPrimaryKey];

Резултат:

+----------------+
| IsPrimaryKey   |
|----------------|
| 0              |
+----------------+

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

Тук отново се използва OBJECT_ID() .

SELECT 
  OBJECT_ID('Musician') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Musician'), 'IsPrimaryKey') AS [IsPrimaryKey],
  OBJECTPROPERTY(OBJECT_ID('Musician'), 'IsTable') AS [IsTable];

Резултат:

+-------------+----------------+-----------+
| Object ID   | IsPrimaryKey   | IsTable   |
|-------------+----------------+-----------|
| 885578193   | 0              | 1         |
+-------------+----------------+-----------+

Проверих също дали обектът е таблица и резултатът е положителен.

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

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

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsPrimaryKey') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsPrimaryKey') 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. Как да видите регистрационните файлове на транзакциите в SQL Server 2008

  2. Как да конвертирам броя на минутите във формат hh:mm в TSQL?

  3. Съхранена процедура - връщане на идентичност като изходен параметър или скалар

  4. Как да предадете параметрите на стойността на таблицата към съхранената процедура от .net код

  5. Ключова дума не се поддържа:метаданни