sql >> Databáze >  >> RDS >> Database

4 způsoby, jak získat definici uložené procedury pomocí Transact-SQL

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


  1. 4 typy informací, které je třeba zahrnout do databáze CRM

  2. Spojení tří tabulek s jinými spojeními než INNER JOIN

  3. Zhroucení MySQL Innodb

  4. Přehled funkce DBCC CheckDB