Database
 sql >> Baza danych >  >> RDS >> Database

4 sposoby na uzyskanie definicji procedury składowanej przy użyciu języka Transact-SQL

W tym artykule przedstawiono 4 sposoby wykorzystania T-SQL do uzyskania definicji procedury składowanej w SQL Server.

Definicja jest faktyczną instrukcją T-SQL używaną do tworzenia procedury składowanej.

Trzy z tych metod są dokładnie takie same, jak te używane do zwracania definicji widoku (z wyjątkiem tego, że są one używane w procedurach składowanych zamiast widokach).

Przykład 1 – Widok katalogu systemu sys.sql_modules

sys.sql_modules widok katalogu systemowego zwraca wiersz dla każdego obiektu, który jest modułem zdefiniowanym w języku SQL w SQL Server.

Innymi słowy, możesz użyć tego widoku do zwrócenia informacji o obiektach różnych typów, w tym o funkcjach, widokach i oczywiście procedurach składowanych.

Jedna z kolumn zwracanych z tym widokiem nazywa się definition . Jak sama nazwa wskazuje, zwraca definicję obiektu.

SELECT definition
FROM sys.sql_modules
WHERE object_id = object_id('uspGetAlbumsByArtist');

Wynik:

+--------------+
| definition   |
|--------------|
| CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
SELECT AlbumName
FROM [dbo].[Albums]
WHERE ArtistId = @ArtistId
              |
+--------------+

W tym przykładzie użyłem interfejsu wiersza poleceń (CLI), więc wynik jest dobrze sformatowany.

Jeśli używasz graficznego interfejsu użytkownika (takiego jak SSMS lub Azure Data Studio), aby zwrócić wyniki w siatce, definicja prawdopodobnie zostanie zwrócona w jednym długim wierszu w jednej komórce. W takich przypadkach będziesz musiał wykonać dodatkową pracę, jeśli chcesz, aby wyświetlał się w bardziej czytelnym formacie. Alternatywnie możesz użyć sp_helptext metoda poniżej.

Przykład 2 – Procedura przechowywana w systemie sp_helptext

Inną metodą zwracania definicji procedury składowanej jest użycie sp_helptext systemowa procedura składowana. Oprócz możliwości zwrócenia definicji (niezaszyfrowanych) procedur składowanych, może również zwrócić definicję reguły zdefiniowanej przez użytkownika, wartość domyślną, widok, funkcję Transact-SQL zdefiniowaną przez użytkownika, wyzwalacz, kolumnę wyliczoną, CHECK ograniczenie lub obiekt systemowy, taki jak systemowa procedura składowana.

Ta procedura składowana wyświetla definicję w wielu wierszach. Każdy wiersz zawiera 255 znaków definicji T-SQL.

Przykład:

EXEC sp_helptext 'uspGetAlbumsByArtist';

Oto wynik, który otrzymuję podczas korzystania z GUI (Azure Data Studio):

A oto, co otrzymuję za pomocą interfejsu wiersza poleceń:

+--------+
| Text   |
|--------|
| CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
        |
| SELECT AlbumName
        |
| FROM [dbo].[Albums]
        |
| WHERE ArtistId = @ArtistId
        |
+--------+

Przykład 3 – Funkcja OBJECT_DEFINITION()

Innym sposobem na zwrócenie definicji procedury składowanej jest użycie OBJECT_DEFINITION() funkcjonować. Podobnie jak w przypadku poprzednich metod, ta metoda może również zwrócić definicję innych typów obiektów.

Oto przykład użycia tej funkcji:

SELECT OBJECT_DEFINITION(
        OBJECT_ID('uspGetAlbumsByArtist')
    ) AS [Definition];

Wynik:

+--------------+
| Definition   |
|--------------|
| CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
SELECT AlbumName
FROM [dbo].[Albums]
WHERE ArtistId = @ArtistId
              |
+--------------+

Przykład 4 – Widok schematu informacji o systemie ROUTINES

ROUTINES Widok schematu informacji o systemie może również zwracać definicję procedur składowanych (i funkcji również).

Ten widok zwraca wiele kolumn, z których jedna to definicja obiektu. Dlatego możemy nazwać tę kolumnę, aby zwrócić tylko definicję:

SELECT ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';

Wynik:

+----------------------+
| ROUTINE_DEFINITION   |
|----------------------|
| CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
SELECT AlbumName
FROM [dbo].[Albums]
WHERE ArtistId = @ArtistId
                      |
+----------------------+

Zwróć uwagę, że ROUTINE_DEFINITION kolumna w tym widoku systemowym ma maksymalną długość nvarchar(4000) . W przypadku definicji większych niż ta, możesz użyć OBJECT_DEFINITION() funkcja lub sys.sql_modules widok w poprzednich przykładach. Oba używają nvarchar(max) dla definicji, więc nie mają ograniczenia znaków ROUTINE_DEFINITION kolumna (która, jak wspomniano, to nvarchar(4000) ).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podświetlanie trafień w wyszukiwaniu pełnotekstowym

  2. Objawy narzutu obserwatora i typu oczekiwania

  3. FORMAT() jest fajny i w ogóle, ale…

  4. FrankenQueries:kiedy SQL i NoSQL zderzają się

  5. Konstruowanie modelu danych dla systemu zarządzania parkingami