Database
 sql >> Base de données >  >> RDS >> Database

4 façons d'obtenir la définition d'une procédure stockée à l'aide de Transact-SQL

Cet article présente 4 façons d'utiliser T-SQL pour obtenir la définition d'une procédure stockée dans SQL Server.

La définition est l'instruction T-SQL réelle utilisée pour créer la procédure stockée.

Trois des méthodes ici sont exactement les mêmes que celles utilisées pour renvoyer la définition d'une vue (sauf ici, elles sont utilisées sur des procédures stockées au lieu de vues).

Exemple 1 - La vue du catalogue système sys.sql_modules

Les sys.sql_modules la vue du catalogue système renvoie une ligne pour chaque objet qui est un module défini par le langage SQL dans SQL Server.

En d'autres termes, vous pouvez utiliser cette vue pour renvoyer des informations sur des objets de différents types, y compris des fonctions, des vues et, bien sûr, des procédures stockées.

L'une des colonnes renvoyées avec cette vue s'appelle definition . Comme son nom l'indique, cela renvoie la définition de l'objet.

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

Résultat :

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

J'ai utilisé une interface de ligne de commande (CLI) avec cet exemple, donc le résultat est bien formaté.

Si vous utilisez une interface graphique (telle que SSMS ou Azure Data Studio) pour renvoyer les résultats dans une grille, la définition sera probablement renvoyée sur une longue ligne dans une seule cellule. Dans de tels cas, vous devrez effectuer un travail supplémentaire si vous souhaitez qu'il soit affiché dans un format plus lisible. Alternativement, vous pouvez utiliser le sp_helptext méthode ci-dessous.

Exemple 2 – La procédure stockée système sp_helptext

Une autre méthode pour renvoyer la définition d'une procédure stockée consiste à utiliser le sp_helptext procédure stockée système. En plus de pouvoir renvoyer la définition des procédures stockées (non chiffrées), il peut également renvoyer la définition d'une règle définie par l'utilisateur, d'une valeur par défaut, d'une vue, d'une fonction Transact-SQL définie par l'utilisateur, d'un déclencheur, d'une colonne calculée, CHECK contrainte ou objet système tel qu'une procédure stockée système.

Cette procédure stockée affiche la définition sur plusieurs lignes. Chaque ligne contient 255 caractères de la définition T-SQL.

Exemple :

EXEC sp_helptext 'uspGetAlbumsByArtist';

Voici le résultat que j'obtiens en utilisant une interface graphique (Azure Data Studio) :

Et voici ce que j'obtiens en utilisant mon interface de ligne de commande :

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

Exemple 3 - La fonction OBJECT_DEFINITION()

Une autre façon de retourner la définition d'une procédure stockée est d'utiliser le OBJECT_DEFINITION() une fonction. Comme pour les méthodes précédentes, cette méthode peut également renvoyer la définition d'autres types d'objets.

Voici un exemple d'utilisation de cette fonction :

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

Résultat :

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

Exemple 4 - La vue du schéma d'informations système ROUTINES

Les ROUTINES La vue de schéma d'informations système peut également renvoyer la définition des procédures stockées (et des fonctions également).

Cette vue renvoie plusieurs colonnes, dont l'une est la définition de l'objet. Par conséquent, nous pouvons nommer cette colonne pour renvoyer uniquement la définition :

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

Résultat :

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

Notez que le ROUTINE_DEFINITION colonne dans cette vue système a une longueur maximale de nvarchar(4000) . Pour des définitions plus grandes que cela, vous pouvez utiliser le OBJECT_DEFINITION() ou la fonction sys.sql_modules voir dans les exemples précédents. Les deux utilisent nvarchar(max) pour la définition, ils n'ont donc pas la limitation de caractères de la ROUTINE_DEFINITION colonne (qui, comme mentionné, est nvarchar(4000) ).