Este artículo presenta 4 formas de usar T-SQL para obtener la definición de un procedimiento almacenado en SQL Server.
La definición es la instrucción T-SQL real utilizada para crear el procedimiento almacenado.
Tres de los métodos aquí son exactamente los mismos que los que se usan para devolver la definición de una vista (excepto que aquí se usan en procedimientos almacenados en lugar de vistas).
Ejemplo 1:la vista de catálogo del sistema sys.sql_modules
Los sys.sql_modules
la vista de catálogo del sistema devuelve una fila para cada objeto que es un módulo definido en lenguaje SQL en SQL Server.
En otras palabras, puede usar esta vista para devolver información sobre objetos de varios tipos, incluidas funciones, vistas y, por supuesto, procedimientos almacenados.
Una de las columnas devueltas con esta vista se llama definition
. Como su nombre lo indica, esto devuelve la definición del objeto.
SELECT definition FROM sys.sql_modules WHERE object_id = object_id('uspGetAlbumsByArtist');
Resultado:
+--------------+ | definition | |--------------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [dbo].[Albums] WHERE ArtistId = @ArtistId | +--------------+
Usé una interfaz de línea de comandos (CLI) con este ejemplo, por lo que el resultado está bien formateado.
Si usa una GUI (como SSMS o Azure Data Studio) para devolver los resultados en una cuadrícula, es probable que la definición se devuelva en una línea larga en una sola celda. En tales casos, deberá hacer un trabajo adicional si desea que se muestre en un formato más legible. Alternativamente, podría usar el sp_helptext
método a continuación.
Ejemplo 2:el procedimiento almacenado del sistema sp_helptext
Otro método para devolver la definición de un procedimiento almacenado es usar el sp_helptext
procedimiento almacenado del sistema. Además de poder devolver la definición de procedimientos almacenados (sin cifrar), también puede devolver la definición de una regla definida por el usuario, predeterminada, vista, función Transact-SQL definida por el usuario, activador, columna calculada, CHECK
restricción u objeto del sistema, como un procedimiento almacenado del sistema.
Este procedimiento almacenado muestra la definición en varias filas. Cada fila contiene 255 caracteres de la definición de T-SQL.
Ejemplo:
EXEC sp_helptext 'uspGetAlbumsByArtist';
Este es el resultado que obtengo cuando uso una GUI (Azure Data Studio):
Y esto es lo que obtengo usando mi interfaz de línea de comandos:
+--------+ | Text | |--------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS | | SELECT AlbumName | | FROM [dbo].[Albums] | | WHERE ArtistId = @ArtistId | +--------+
Ejemplo 3:la función OBJECT_DEFINITION()
Otra forma de devolver la definición de un procedimiento almacenado es usar OBJECT_DEFINITION()
función. Al igual que con los métodos anteriores, este método también puede devolver la definición de otros tipos de objetos.
Aquí hay un ejemplo del uso de esta función:
SELECT OBJECT_DEFINITION( OBJECT_ID('uspGetAlbumsByArtist') ) AS [Definition];
Resultado:
+--------------+ | Definition | |--------------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [dbo].[Albums] WHERE ArtistId = @ArtistId | +--------------+
Ejemplo 4:la vista de esquema de información del sistema ROUTINES
Las ROUTINES
La vista de esquema de información del sistema también puede devolver la definición de procedimientos almacenados (y funciones también).
Esta vista devuelve muchas columnas, una de las cuales es la definición del objeto. Por lo tanto, podemos nombrar esa columna para devolver solo la definición:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';
Resultado:
+----------------------+ | ROUTINE_DEFINITION | |----------------------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [dbo].[Albums] WHERE ArtistId = @ArtistId | +----------------------+
Tenga en cuenta que ROUTINE_DEFINITION
columna en esta vista del sistema tiene una longitud máxima de nvarchar(4000) . Para definiciones más grandes que esta, puede usar OBJECT_DEFINITION()
o la función sys.sql_modules
vista en los ejemplos anteriores. Ambos usan nvarchar(max) para la definición, por lo que no tienen la limitación de caracteres de ROUTINE_DEFINITION
columna (que, como se mencionó, es nvarchar(4000) ).