Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Sprawdź, czy obiekt jest procedurą składowaną, używając OBJECTPROPERTY() w SQL Server

W SQL Server możesz użyć OBJECTPROPERTY() funkcja, aby dowiedzieć się, czy obiekt jest procedurą składowaną.

Ta funkcja akceptuje dwa parametry:identyfikator obiektu i właściwość, dla której ją sprawdzasz.

Dlatego możesz przekazać identyfikator obiektu jako pierwszy argument, a IsProcedure jako drugi, a funkcja zwróci albo 1 lub 0 w zależności od tego, czy jest to procedura składowana.

Zwracana wartość 1 oznacza, że ​​jest procedura składowana i wartość 0 oznacza, że ​​tak nie jest.

Przykład 1 – Podstawowe użycie

Oto krótki przykład do zademonstrowania.

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

Wynik:

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

W tym przypadku Muzyka baza danych zawiera obiekt z podanym identyfikatorem i w rzeczywistości jest to procedura składowana.

Przykład 2 – Uzyskanie identyfikatora obiektu

Jeśli znasz nazwę obiektu, ale nie znasz jego identyfikatora, możesz użyć OBJECT_ID() funkcja do pobrania identyfikatora na podstawie jego nazwy.

Przykład:

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

Wynik:

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

W tym przypadku sprawdziłem ten sam obiekt z poprzedniego przykładu.

Tutaj znowu jest z wyjściem ID osobno.

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

Wynik:

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

Przykład 3 – gdy obiekt NIE jest procedurą składowaną

Oto, co się dzieje, gdy obiekt nie jest procedurą składowaną.

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

Wynik:

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

W takim przypadku baza danych tak w rzeczywistości mam obiekt o tym identyfikatorze, ale obiekt jest w rzeczywistości tabelą, więc otrzymuję wynik ujemny.

Tutaj znowu używamy OBJECT_ID() .

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

Wynik:

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

Przykład 4 – Obiekt nie istnieje

SQL Server zakłada, że ​​identyfikator obiektu znajduje się w bieżącym kontekście bazy danych. Jeśli przekażesz identyfikator obiektu z innej bazy danych, otrzymasz wynik NULL lub otrzymasz nieprawidłowe wyniki.

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

Wynik:

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

W takim przypadku baza danych nie zawiera obiektów o tej nazwie lub identyfikatorze.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co SqlDbType mapuje na varBinary(max)?

  2. Jakie są przypadki użycia wyboru CHAR nad VARCHAR w SQL?

  3. Scal dwie partycje w jedną w programie SQL Server (T-SQL)

  4. Co sprawia, że ​​instrukcja SQL jest sargowalna?

  5. Jak używać GROUP BY do łączenia ciągów w SQL Server?