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

Użyj OBJECTPROPERTY(), aby dowiedzieć się, czy tabela jest tabelą systemową w SQL Server

OBJECTPROPERTY() funkcja w SQL Server umożliwia sprawdzenie obiektu pod kątem określonej właściwości.

Możesz użyć tej funkcji, aby sprawdzić, czy obiekt jest tabelą systemową, czy nie. Aby to zrobić, przekaż identyfikator obiektu jako pierwszy argument, a IsSystemTable jako drugi argument. Funkcja zwraca 1 lub 0 w zależności od tego, czy jest to tabela systemowa (1 oznacza, że ​​jest tabela systemowa i 0 oznacza, że ​​tak nie jest).

Przykład 1 – Podstawowe użycie

Oto krótki przykład do zademonstrowania.

SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];

Wynik:

+-----------------+
| IsSystemTable   |
|-----------------|
| 1               |
+-----------------+

W tym przypadku obiekt jest tabela systemowa.

Przykład 2 – Obiekt NIE jest tabelą systemową

Oto, co się dzieje, gdy obiekt nie jest tabelą systemową.

SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];

Wynik:

+-----------------+
| IsSystemTable   |
|-----------------|
| 0               |
+-----------------+

W takim przypadku baza danych tak w rzeczywistości mam obiekt o tym identyfikatorze, ale obiekt jest w rzeczywistości tabelą zdefiniowaną przez użytkownika, więc otrzymuję wynik negatywny.

Tutaj znowu używamy OBJECT_ID() aby uzyskać identyfikator z nazwy obiektu.

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

Wynik:

+-------------+-----------------+---------------+
| Object ID   | IsSystemTable   | IsUserTable   |
|-------------+-----------------+---------------|
| 1013578649  | 0               | 1             |
+-------------+-----------------+---------------+

Sprawdziłem również, czy obiekt jest tabelą zdefiniowaną przez użytkownika i wynik jest pozytywny.

Przykład 3 – 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'), 'IsSystemTable') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsSystemTable') 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. Jak programowo ustawić parametry połączenia dla Entity-Framework Code-First?

  2. Jak mogę zobaczyć aktywne połączenia SQL Server?

  3. Jak mogę pobrać listę parametrów z procedury składowanej w SQL Server?

  4. Zmiany w licencjonowaniu Common Sense dla SQL Server 2014 Standard Edition

  5. Przegląd typów złączeń SQL wraz z przykładami