Database
 sql >> Datenbank >  >> RDS >> Database

4 Möglichkeiten zum Abrufen der Definition einer gespeicherten Prozedur mit Transact-SQL

Dieser Artikel stellt 4 Möglichkeiten zur Verwendung von T-SQL vor, um die Definition einer gespeicherten Prozedur in SQL Server abzurufen.

Die Definition ist die eigentliche T-SQL-Anweisung, die zum Erstellen der gespeicherten Prozedur verwendet wird.

Drei der Methoden hier sind genau die gleichen wie diejenigen, die zum Zurückgeben der Definition einer Ansicht verwendet werden (außer dass sie hier für gespeicherte Prozeduren anstelle von Ansichten verwendet werden).

Beispiel 1 – Die Systemkatalogansicht sys.sql_modules

Die sys.sql_modules Die Systemkatalogansicht gibt eine Zeile für jedes Objekt zurück, das ein in der SQL-Sprache definiertes Modul in SQL Server ist.

Mit anderen Worten, Sie können diese Ansicht verwenden, um Informationen über Objekte verschiedener Typen zurückzugeben, einschließlich Funktionen, Ansichten und natürlich gespeicherter Prozeduren.

Eine der mit dieser Ansicht zurückgegebenen Spalten heißt definition . Wie der Name schon sagt, gibt dies die Definition des Objekts zurück.

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

Ergebnis:

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

Ich habe in diesem Beispiel eine Befehlszeilenschnittstelle (CLI) verwendet, daher ist das Ergebnis schön formatiert.

Wenn Sie eine GUI (z. B. SSMS oder Azure Data Studio) verwenden, um die Ergebnisse in einem Raster zurückzugeben, wird die Definition wahrscheinlich in einer langen Zeile in einer einzelnen Zelle zurückgegeben. In solchen Fällen müssen Sie zusätzliche Arbeit leisten, wenn Sie möchten, dass es in einem besser lesbaren Format angezeigt wird. Alternativ könnten Sie den sp_helptext verwenden Methode unten.

Beispiel 2 – Die gespeicherte Systemprozedur sp_helptext

Eine andere Methode zur Rückgabe der Definition einer gespeicherten Prozedur ist die Verwendung von sp_helptext System gespeicherte Prozedur. Es kann nicht nur die Definition für (unverschlüsselte) gespeicherte Prozeduren zurückgeben, sondern auch die Definition einer benutzerdefinierten Regel, eines Standardwerts, einer Ansicht, einer benutzerdefinierten Transact-SQL-Funktion, eines Triggers, einer berechneten Spalte, CHECK Einschränkung oder Systemobjekt wie eine gespeicherte Systemprozedur.

Diese gespeicherte Prozedur zeigt die Definition über mehrere Zeilen hinweg an. Jede Zeile enthält 255 Zeichen der T-SQL-Definition.

Beispiel:

EXEC sp_helptext 'uspGetAlbumsByArtist';

Hier ist das Ergebnis, das ich erhalte, wenn ich eine GUI (Azure Data Studio) verwende:

Und hier ist, was ich über meine Befehlszeilenschnittstelle bekomme:

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

Beispiel 3 – Die Funktion OBJECT_DEFINITION()

Eine andere Möglichkeit, die Definition einer gespeicherten Prozedur zurückzugeben, ist die Verwendung von OBJECT_DEFINITION() Funktion. Wie bei den vorherigen Methoden kann auch diese Methode die Definition anderer Objekttypen zurückgeben.

Hier ist ein Beispiel für die Verwendung dieser Funktion:

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

Ergebnis:

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

Beispiel 4 – Schemaansicht der ROUTINES-Systeminformationen

Die ROUTINES System Information Schema View kann auch die Definition gespeicherter Prozeduren (und auch Funktionen) zurückgeben.

Diese Ansicht gibt viele Spalten zurück, von denen eine die Definition des Objekts ist. Daher können wir diese Spalte benennen, um nur die Definition zurückzugeben:

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

Ergebnis:

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

Beachten Sie, dass die ROUTINE_DEFINITION Spalte in dieser Systemansicht hat eine maximale Länge von nvarchar(4000) . Für größere Definitionen können Sie OBJECT_DEFINITION() verwenden Funktion oder die sys.sql_modules Ansicht in den vorherigen Beispielen. Beide verwenden nvarchar(max) für die Definition, also haben sie nicht die Zeichenbeschränkung der ROUTINE_DEFINITION Spalte (die wie erwähnt nvarchar(4000) ist). ).