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

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

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

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

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

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

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

USE Music;
SELECT OBJECTPROPERTY(34099162, 'IsTableFunction') AS [IsTableFunction];

Резултат:

+-------------------+
| IsTableFunction   |
|-------------------|
| 1                 |
+-------------------+

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

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

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

Пример:

SELECT OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];

Резултат:

+-------------------+
| IsTableFunction   |
|-------------------|
| 1                 |
+-------------------+

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

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

SELECT 
  OBJECT_ID('ufn_AlbumsByGenre') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];

Резултат:

+-------------+-------------------+
| Object ID   | IsTableFunction   |
|-------------+-------------------|
| 34099162    | 1                 |
+-------------+-------------------+

Пример 3 – Когато обектът НЕ е функция с таблично стойност

Ето какво се случва, когато обектът не е функция с таблична стойност.

SELECT OBJECTPROPERTY(885578193, 'IsTableFunction') AS [IsTableFunction];

Резултат:

+-------------------+
| IsTableFunction   |
|-------------------|
| 0                 |
+-------------------+

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

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

SELECT 
  OBJECT_ID('Artists') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsTableFunction') AS [IsTableFunction],
  OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsUserTable') AS [IsUserTable];

Резултат:

+-------------+-------------------+---------------+
| Object ID   | IsTableFunction   | IsUserTable   |
|-------------+-------------------+---------------|
| 885578193   | 0                 | 1             |
+-------------+-------------------+---------------+

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

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

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

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsTableFunction') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsTableFunction') 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. Списък на всички индексни и индексни колони в SQL Server DB

  2. Какви са ограниченията на SQL Server Compact? (Или - как се избира база данни, която да се използва на MS платформи?)

  3. Получаване на данни от съхранена процедура с Entity Framework

  4. Инструкция PRINT в T-SQL

  5. Функция с стойност на таблица с множество изрази срещу функция с стойност на вградена таблица