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.