Tento článek představuje 4 způsoby použití T-SQL k získání definice uložené procedury v SQL Server.
Definice je skutečný příkaz T-SQL použitý k vytvoření uložené procedury.
Tři ze zde uvedených metod jsou přesně stejné jako ty, které se používají pro vrácení definice pohledu (kromě tohoto, jsou používány u uložených procedur místo pohledů).
Příklad 1 – Zobrazení katalogu systému sys.sql_modules
Soubor sys.sql_modules
zobrazení systémového katalogu vrátí řádek pro každý objekt, který je modulem definovaným jazykem SQL na serveru SQL.
Jinými slovy, toto zobrazení můžete použít k vrácení informací o objektech různých typů, včetně funkcí, pohledů a samozřejmě uložených procedur.
Jeden ze sloupců vrácených tímto pohledem se nazývá definition
. Jak název napovídá, vrátí definici objektu.
SELECT definition FROM sys.sql_modules WHERE object_id = object_id('uspGetAlbumsByArtist');
Výsledek:
+--------------+ | definition | |--------------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [dbo].[Albums] WHERE ArtistId = @ArtistId | +--------------+
V tomto příkladu jsem použil rozhraní příkazového řádku (CLI), takže výsledek je pěkně naformátovaný.
Pokud k vrácení výsledků v mřížce použijete grafické uživatelské rozhraní (například SSMS nebo Azure Data Studio), bude definice pravděpodobně vrácena v jednom dlouhém řádku v jedné buňce. V takových případech budete muset udělat nějakou práci navíc, pokud chcete, aby se zobrazoval v čitelnějším formátu. Případně můžete použít sp_helptext
níže.
Příklad 2 – Systémová uložená procedura sp_helptext
Další metodou vrácení definice uložené procedury je použití sp_helptext
uložená procedura systému. Kromě toho, že dokáže vrátit definici (nešifrovaných) uložených procedur, může také vrátit definici uživatelem definovaného pravidla, výchozího, pohledu, uživatelem definované funkce Transact-SQL, spouštěče, vypočítaného sloupce, CHECK
omezení nebo systémový objekt, jako je systémová uložená procedura.
Tato uložená procedura zobrazuje definici na více řádcích. Každý řádek obsahuje 255 znaků T-SQL definice.
Příklad:
EXEC sp_helptext 'uspGetAlbumsByArtist';
Zde je výsledek, který dostanu při použití GUI (Azure Data Studio):
A zde je to, co získám pomocí rozhraní příkazového řádku:
+--------+ | Text | |--------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS | | SELECT AlbumName | | FROM [dbo].[Albums] | | WHERE ArtistId = @ArtistId | +--------+
Příklad 3 – Funkce OBJECT_DEFINITION()
Dalším způsobem, jak vrátit definici uložené procedury, je použít OBJECT_DEFINITION()
funkce. Stejně jako u předchozích metod může tato metoda také vrátit definici jiných typů objektů.
Zde je příklad použití této funkce:
SELECT OBJECT_DEFINITION( OBJECT_ID('uspGetAlbumsByArtist') ) AS [Definition];
Výsledek:
+--------------+ | Definition | |--------------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [dbo].[Albums] WHERE ArtistId = @ArtistId | +--------------+
Příklad 4 – Zobrazení schématu systémových informací ROUTINES
ROUTINES
zobrazení schématu systémových informací může také vrátit definici uložených procedur (a také funkcí).
Toto zobrazení vrací mnoho sloupců, z nichž jeden je definice objektu. Proto můžeme tento sloupec pojmenovat a vrátit pouze definici:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';
Výsledek:
+----------------------+ | ROUTINE_DEFINITION | |----------------------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [dbo].[Albums] WHERE ArtistId = @ArtistId | +----------------------+
Všimněte si, že ROUTINE_DEFINITION
sloupec v tomto systémovém zobrazení má maximální délku nvarchar(4000) . Pro definice větší, než je tato, můžete použít OBJECT_DEFINITION()
nebo sys.sql_modules
zobrazit v předchozích příkladech. Oba používají nvarchar(max) pro definici, takže nemají omezení počtu znaků podle ROUTINE_DEFINITION
sloupec (jak již bylo zmíněno, je nvarchar(4000) ).