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.