Database
 sql >> база данни >  >> RDS >> Database

4 начина да получите дефиницията на съхранена процедура с помощта на Transact-SQL

Тази статия представя 4 начина за използване на T-SQL за получаване на дефиницията на съхранена процедура в SQL Server.

Дефиницията е действителният израз на T-SQL, използван за създаване на съхранената процедура.

Три от методите тук са абсолютно същите като тези, използвани за връщане на дефиницията на изглед (освен тук, те се използват за съхранени процедури вместо изгледи).

Пример 1 – Изгледът на системния каталог sys.sql_modules

sys.sql_modules Изгледът на системния каталог връща ред за всеки обект, който е модул, дефиниран от SQL език в SQL Server.

С други думи, можете да използвате този изглед, за да връщате информация за обекти от различни типове, включително функции, изгледи и разбира се, съхранени процедури.

Една от колоните, върнати с този изглед, се нарича definition . Както подсказва името, това връща дефиницията на обекта.

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

Резултат:

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

Използвах интерфейс на командния ред (CLI) с този пример, така че резултатът е добре форматиран.

Ако използвате GUI (като SSMS или Azure Data Studio), за да върнете резултатите в мрежа, дефиницията вероятно ще бъде върната в един дълъг ред в една клетка. В такива случаи ще трябва да свършите допълнителна работа, ако искате да се показва в по-четлив формат. Като алтернатива можете да използвате sp_helptext метод по-долу.

Пример 2 – Системната запаметена процедура sp_helptext

Друг метод за връщане на дефиницията на съхранена процедура е използването на sp_helptext системна съхранена процедура. Освен че може да върне дефиницията за (некриптирани) съхранени процедури, той може също да върне дефиницията на дефинирано от потребител правило, по подразбиране, изглед, дефинирана от потребителя Transact-SQL функция, тригер, изчислена колона, CHECK ограничение или системен обект, като например системна съхранена процедура.

Тази съхранена процедура показва дефиницията в множество редове. Всеки ред съдържа 255 знака от дефиницията на T-SQL.

Пример:

EXEC sp_helptext 'uspGetAlbumsByArtist';

Ето резултата, който получавам, когато използвам GUI (Azure Data Studio):

И ето какво получавам с моя интерфейс на командния ред:

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

Пример 3 – Функцията OBJECT_DEFINITION()

Друг начин да върнете дефиницията на съхранена процедура е да използвате OBJECT_DEFINITION() функция. Както при предишните методи, този метод може също да върне дефиницията на други типове обекти.

Ето пример за използване на тази функция:

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

Резултат:

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

Пример 4 – Изгледът на схемата за системна информация ROUTINES

ROUTINES Изгледът на схемата за системна информация може също да върне дефиницията на съхранените процедури (и функциите също).

Този изглед връща много колони, една от които е дефиницията на обекта. Следователно можем да назовем тази колона, за да върнем само дефиницията:

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

Резултат:

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

Обърнете внимание, че ROUTINE_DEFINITION колоната в този системен изглед има максимална дължина от nvarchar(4000) . За дефиниции, по-големи от това, можете да използвате OBJECT_DEFINITION() функция или sys.sql_modules вижте в предишните примери. И двете използват nvarchar(max) за дефиницията, така че те нямат ограничението за знаци на ROUTINE_DEFINITION колона (която, както споменахме, е nvarchar(4000) ).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Всичко, което трябва да знаете за нормализирането на базата данни

  2. Наемане или наемане:Модел на данни за процеса на подбор

  3. Могат ли коментарите да попречат на производителността на съхранените процедури?

  4. Мигриране от AnswerHub към WordPress:Приказка за 10 технологии

  5. Как да напишете изявление CASE в SQL