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

Sprawdź, czy obiekt jest kluczem podstawowym za pomocą OBJECTPROPERTY() w SQL Server

Możesz użyć OBJECTPROPERTY() funkcji w SQL Server, aby sprawdzić, czy obiekt jest kluczem podstawowym.

Aby dowiedzieć się, czy obiekt jest kluczem podstawowym, przekaż identyfikator obiektu jako pierwszy argument, a IsPrimaryKey jako drugi argument. Funkcja zwraca 1 lub 0 w zależności od tego, czy jest to klucz podstawowy.

Zwracana wartość 1 oznacza, że ​​jest klucz podstawowy i wartość 0 oznacza, że ​​tak nie jest.

Przykład 1 – Podstawowe użycie

Oto krótki przykład do zademonstrowania.

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

Wynik:

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

W tym przypadku PK_Test baza danych zawiera obiekt z podanym identyfikatorem i jest to klucz podstawowy.

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('PK_Musician'), 'IsPrimaryKey') AS [IsPrimaryKey];

Wynik:

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

W tym przypadku sprawdziłem ten sam obiekt z poprzedniego przykładu.

Tutaj znowu jest z wyjściem ID oddzielnie.

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

Wynik:

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

Przykład 3 – gdy obiekt NIE jest kluczem podstawowym

Oto, co się dzieje, gdy obiekt nie jest kluczem podstawowym.

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

Wynik:

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

W takim przypadku baza danych tak w rzeczywistości mam obiekt o tym identyfikatorze, ale obiekt jest w rzeczywistości tabelą, więc otrzymuję wynik ujemny.

Tutaj znowu używamy OBJECT_ID() .

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

Wynik:

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

Sprawdziłem również, czy obiekt jest tabelą i 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'), 'IsPrimaryKey') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsPrimaryKey') 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. Nie można zalogować się do SQL Server + SQL Server Authentication + Błąd:18456

  2. Napraw „nazwa profilu jest nieprawidłowa” podczas wysyłania poczty z serwera SQL

  3. Jak przekonwertować uniksowy znacznik czasu na wartość daty/godziny w SQL Server

  4. Dlaczego w moich wartościach w kolumnie IDENTITY są luki?

  5. Jaka jest różnica między tabelą tymczasową a zmienną tabeli w programie SQL Server?