sql >> Database >  >> RDS >> Database

4 manieren om de definitie van een opgeslagen procedure te krijgen met Transact-SQL

Dit artikel presenteert 4 manieren om T-SQL te gebruiken om de definitie van een opgeslagen procedure in SQL Server te krijgen.

De definitie is de feitelijke T-SQL-instructie die wordt gebruikt om de opgeslagen procedure te maken.

Drie van de methoden hier zijn precies dezelfde als degene die worden gebruikt voor het retourneren van de definitie van een weergave (behalve hier, ze worden gebruikt op opgeslagen procedures in plaats van weergaven).

Voorbeeld 1 – De systeemcatalogusweergave sys.sql_modules

De sys.sql_modules systeemcatalogusweergave retourneert een rij voor elk object dat een SQL-taalgedefinieerde module in SQL Server is.

Met andere woorden, u kunt deze weergave gebruiken om informatie te retourneren over objecten van verschillende typen, inclusief functies, weergaven en natuurlijk opgeslagen procedures.

Een van de kolommen die met deze weergave worden geretourneerd, heet definition . Zoals de naam al aangeeft, geeft dit de definitie van het object terug.

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

Resultaat:

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

Ik heb bij dit voorbeeld een opdrachtregelinterface (CLI) gebruikt, dus het resultaat is mooi opgemaakt.

Als u een GUI (zoals SSMS of Azure Data Studio) gebruikt om de resultaten in een raster te retourneren, wordt de definitie waarschijnlijk in één lange regel in één cel geretourneerd. In dergelijke gevallen moet u wat extra werk doen als u wilt dat het in een beter leesbaar formaat wordt weergegeven. Als alternatief kunt u de sp_helptext . gebruiken methode hieronder.

Voorbeeld 2 – De sp_helptext systeem opgeslagen procedure

Een andere methode om de definitie van een opgeslagen procedure te retourneren, is door de sp_helptext . te gebruiken systeem opgeslagen procedure. Behalve dat het de definitie voor (niet-versleutelde) opgeslagen procedures kan retourneren, kan het ook de definitie van een door de gebruiker gedefinieerde regel, standaard, weergave, door de gebruiker gedefinieerde Transact-SQL-functie, trigger, berekende kolom, CHECK beperking of systeemobject zoals een door het systeem opgeslagen procedure.

Deze opgeslagen procedure geeft de definitie weer over meerdere rijen. Elke rij bevat 255 tekens van de T-SQL-definitie.

Voorbeeld:

EXEC sp_helptext 'uspGetAlbumsByArtist';

Dit is het resultaat dat ik krijg als ik een GUI (Azure Data Studio) gebruik:

En dit is wat ik krijg met mijn opdrachtregelinterface:

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

Voorbeeld 3 – De OBJECT_DEFINITION() Functie

Een andere manier om de definitie van een opgeslagen procedure terug te geven, is door de OBJECT_DEFINITION() te gebruiken. functie. Net als bij de vorige methoden, kan deze methode ook de definitie van andere objecttypen retourneren.

Hier is een voorbeeld van het gebruik van deze functie:

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

Resultaat:

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

Voorbeeld 4 – De ROUTINES Systeeminformatie Schemaweergave

De ROUTINES systeeminformatieschemaweergave kan ook de definitie van opgeslagen procedures (en ook functies) retourneren.

Deze weergave retourneert veel kolommen, waaronder de definitie van het object. Daarom kunnen we die kolom een ​​naam geven om alleen de definitie terug te geven:

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

Resultaat:

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

Merk op dat de ROUTINE_DEFINITION kolom in deze systeemweergave heeft een maximale lengte van nvarchar(4000) . Voor grotere definities kunt u de OBJECT_DEFINITION() . gebruiken functie of de sys.sql_modules bekijken in de vorige voorbeelden. Beide gebruiken nvarchar(max) voor de definitie, zodat ze niet de tekenbeperking hebben van de ROUTINE_DEFINITION kolom (die, zoals vermeld, nvarchar(4000) . is ).


  1. Hoe een Foreign key Constraint toe te voegen aan een bestaande tabel in SQL Server - SQL Server / TSQL Tutorial Part 68

  2. Deel 1:Beeldclassificatie met MariaDB Server en TensorFlow - een overzicht

  3. 5 goede redenen om Microsoft Access-sjablonen te downloaden en te gebruiken

  4. Oracle CREATE TABLE Commando in PL/SQL met 10 voorbeelden