OBJECTPROPERTY() функцията в SQL Server ви позволява да проверите обект за конкретно свойство.
Можете да използвате тази функция, за да проверите дали даден обект е системна таблица или не. За да направите това, предайте идентификатора на обекта като първи аргумент и IsSystemTable като втори аргумент. Функцията връща 1 или 0 в зависимост от това дали това е системна таблица или не (1 означава, че е системна таблица и 0 означава, че не е).
Пример 1 – Основна употреба
Ето един бърз пример за демонстрация.
SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];
Резултат:
+-----------------+ | IsSystemTable | |-----------------| | 1 | +-----------------+
В този случай обектът е системна таблица.
Пример 2 – Обектът НЕ е системна таблица
Ето какво се случва, когато обектът не е системна таблица.
SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];
Резултат:
+-----------------+ | IsSystemTable | |-----------------| | 0 | +-----------------+
В този случай базата данни прави всъщност имам обект с този идентификатор, но обектът всъщност е дефинирана от потребителя таблица, така че получавам отрицателен резултат.
Тук отново се използва OBJECT_ID() за да получите идентификатора от името на обекта.
SELECT
OBJECT_ID('Dimension.City') AS [Object ID],
OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsSystemTable') AS [IsSystemTable],
OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];
Резултат:
+-------------+-----------------+---------------+ | Object ID | IsSystemTable | IsUserTable | |-------------+-----------------+---------------| | 1013578649 | 0 | 1 | +-------------+-----------------+---------------+
Проверих също дали обектът е дефинирана от потребителя таблица и резултатът е положителен.
Пример 3 – Обектът не съществува
SQL Server приема, че идентификаторът на обекта е в текущия контекст на базата данни. Ако подадете идентификатор на обект от друга база данни, или ще получите резултат NULL, или ще получите неправилни резултати.
SELECT
OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsSystemTable') AS [InvalidObject],
OBJECTPROPERTY(12345678, 'IsSystemTable') AS [12345678];
Резултат:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
В този случай базата данни не съдържа обекти с това име или ID и така получавам резултат NULL.
Освен това ще получите NULL при грешка или ако нямате разрешение да видите обекта.