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

Проверете дали даден обект е съхранена процедура, като използвате OBJECTPROPERTY() в SQL Server

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

Тази функция приема два параметъра:идентификатора на обекта и свойството, за което го проверявате.

Следователно можете да подадете идентификатора на обекта като първи аргумент и IsProcedure като второто и функцията ще върне или 1 или 0 в зависимост от това дали това е съхранена процедура или не.

Връщана стойност на 1 означава, че е съхранена процедура и стойност 0 означава, че не е.

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

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

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(466100701, 'IsProcedure') AS [IsProcedure];

Резултат:

+---------------+
| IsProcedure   |
|---------------|
| 1             |
+---------------+

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

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

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

Пример:

SELECT OBJECTPROPERTY(OBJECT_ID('Integration.GetLineageKey'), 'IsProcedure') AS [IsProcedure];

Резултат:

+---------------+
| IsProcedure   |
|---------------|
| 1             |
+---------------+

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

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

SELECT 
  OBJECT_ID('Integration.GetLineageKey') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Integration.GetLineageKey'), 'IsProcedure') AS [IsProcedure];

Резултат:

+-------------+---------------+
| Object ID   | IsProcedure   |
|-------------+---------------|
| 466100701   | 1             |
+-------------+---------------+

Пример 3 – Когато обектът НЕ е съхранена процедура

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

SELECT OBJECTPROPERTY(1013578649, 'IsProcedure') AS [IsProcedure];

Резултат:

+---------------+
| IsProcedure   |
|---------------|
| 0             |
+---------------+

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

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

SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsProcedure') AS [IsProcedure];

Резултат:

+-------------+---------------+
| Object ID   | IsProcedure   |
|-------------+---------------|
| 1013578649  | 0             |
+-------------+---------------+

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

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

SELECT 
  OBJECTPROPERTY(OBJECT_ID('NonExistentObject'), 'IsProcedure') AS [NonExistentObject],
  OBJECTPROPERTY(11111111, 'IsProcedure') AS [11111111];

Резултат:

+---------------------+------------+
| NonExistentObject   | 11111111   |
|---------------------+------------|
| NULL                | NULL       |
+---------------------+------------+

В този случай базата данни не съдържа обекти с това име или ID.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Скрипт за унищожаване на всички връзки към база данни (Повече от RESTRICTED_USER ROLLBACK)

  2. Най-доброто решение за пейджинг, използващо SQL Server 2005?

  3. Мониторинг на TempDB на SQL Server чрез използване на динамични изгледи за управление (DMV)

  4. Низови функции на SQL Server (пълен списък)

  5. съхранявате арабски в SQL база данни