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

Разберете дали даден обект е дефинирана от потребителя таблица в SQL Server с OBJECTPROPERTY()

Можете да използвате OBJECTPROPERTY() функция в SQL Server, за да провери дали даден обект е дефинирана от потребителя таблица или не.

За да направите това, предайте идентификатора на обекта като първи аргумент и IsUserTable като втори аргумент. Функцията връща 1 или 0 в зависимост от това дали е дефинирана от потребителя таблица.

Връщана стойност на 1 означава, че е дефинирана от потребителя таблица и стойност 0 означава, че не е.

Пример 1 – Основна употреба

Ето един бърз пример за демонстрация.

ИЗПОЛЗВАЙТЕ WideWorldImportersDW;ИЗБЕРЕТЕ OBJECTPROPERTY(1013578649, 'IsUserTable') КАТО [IsUserTable];

Резултат:

+---------------+| IsUserTable ||--------------|| 1 |+--------------+

В този случай WideWorldImportersDW базата данни има обект с предоставения идентификатор и е дефинирана от потребителя таблица.

Пример 2 – Получаване на идентификатора на обекта

Ако знаете името на обекта, но не и неговия идентификатор, можете да използвате OBJECT_ID() функция за извличане на идентификатора въз основа на неговото име.

Пример:

ИЗБЕРЕТЕ OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') КАТО [IsUserTable];

Резултат:

+---------------+| IsUserTable ||--------------|| 1 |+--------------+

Това е същият обект от предишния пример.

Ето го отново с отделно извеждане на ID.

ИЗБЕРЕТЕ OBJECT_ID('Dimension.City') КАТО [ИД на обект], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') КАТО [IsUserTable];

Резултат:

+------------+--------------+| Идентификатор на обект | IsUserTable ||------------+--------------|| 1013578649 | 1 |+------------+--------------+

Пример 3 – Когато обектът НЕ е таблица, дефинирана от потребителя

Ето какво се случва, когато обектът не е потребителска таблица.

ИЗБЕРЕТЕ OBJECTPROPERTY(402100473, 'IsUserTable') КАТО [IsUserTable];

Резултат:

+---------------+| IsUserTable ||--------------|| 0 |+--------------+

В този случай базата данни прави имам обект с този идентификатор, но обектът всъщност е съхранена процедура (а не таблица, дефинирана от потребителя), така че получавам отрицателен резултат.

Тук отново се използва OBJECT_ID() .

ИЗБЕРЕТЕ OBJECT_ID('Sequences.ReseedAllSequences') КАТО [ID на обект], OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsUserTable') КАТО [IsUserTable], OBJECTPROPERTY('SeeedAllSequences'Sequences.Sequencell), IsProcedure') AS [IsProcedure];

Резултат:

+------------+--------------+--------------+ | Идентификатор на обект | IsUserTable | IsProcedure ||------------+--------------+---------------|| 402100473 | 0 | 1 |+------------+--------------+--------------+ 

Проверих също дали обектът е съхранена процедура и резултатът е положителен.

Пример 4 – Обектът не съществува

SQL Server приема, че идентификаторът на обекта е в текущия контекст на базата данни. Ако подадете идентификатор на обект от друга база данни, или ще получите резултат NULL, или ще получите неправилни резултати.

ИЗБЕРЕТЕ OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsUserTable') КАТО [InvalidObject], OBJECTPROPERTY(12345678, 'IsUserTable') КАТО [12345678];

Резултат:

+-----------------+-----------+| Невалиден обект | 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. Как да конвертирате между формати на дата в SQL Server с помощта на CAST()

  2. Как да създадете централна заявка в sql сървър без агрегатна функция

  3. Driver.getConnection виси с помощта на драйвер на SQLServer и Java 1.6.0_29

  4. Измервате ли производителността на SQL Server с тези показатели?

  5. Fix Error Msg 4151 „Типът на първия аргумент за NULLIF не може да бъде константа NULL, защото типът на първия аргумент трябва да бъде известен“ в SQL Server