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

Използвайте OBJECTPROPERTY(), за да разберете дали дадена таблица е системна таблица в SQL Server

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 при грешка или ако нямате разрешение да видите обекта.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какъв е най-добрият начин да изберете минималната стойност от няколко колони?

  2. Изберете размер на базата данни на SQL Server

  3. SQL:Изберете Топ 3 записа + Сума от количество

  4. Как да комбинирате резултатите от две заявки в един набор от данни

  5. Лоши навици:Избягване на NULL в SQL Server