В 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.