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 ).