Este artículo presenta dos formas de devolver una lista de procedimientos almacenados en una base de datos de SQL Server.
Opción 1:la vista de esquema de información de RUTINAS
Puedes usar las ROUTINES
vista de esquema de información para obtener una lista de todos los procedimientos almacenados definidos por el usuario en una base de datos.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Resultado:
+------------------+----------------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | |------------------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +------------------+----------------------+
Devolver la definición del procedimiento
El INFORMATION_SCHEMA.ROUTINES
la vista también tiene una ROUTINE_DEFINITION
columna, por lo que puede devolver fácilmente la definición de cada procedimiento almacenado si es necesario.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Opción 2:la vista del catálogo del sistema sys.objects
Otra forma de devolver una lista de procedimientos almacenados es consultar el sys.objects
vista del catálogo del sistema.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type = 'P';
Resultado:
+----------+----------------------+ | Schema | name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
El tipo P
es presumible para “Procedimiento”.
Otra forma de hacer esto es filtrar por type_desc
columna:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type_desc = 'SQL_STORED_PROCEDURE';
Devolver la definición del procedimiento
Los sys.objects
view no incluye una columna para la definición del objeto. Si desea devolver la definición de cada procedimiento almacenado, puede unirlo con sys.sql_modules
vista del sistema.
Ejemplo:
SELECT definition FROM sys.objects o INNER JOIN sys.sql_modules m ON o.object_id = m.object_id WHERE type = 'P';
Opción 3:la vista de catálogo de sys.procedures
Los sys.procedures
El procedimiento almacenado de catálogo contiene una fila para cada objeto que es un procedimiento de algún tipo, con sys.objects.type =P, X, RF y PC.
Ejecutar el siguiente código devolverá todos los procedimientos almacenados que el usuario posee o en los que se le ha otorgado algún permiso.
SELECT SCHEMA_NAME(schema_id) AS [Schema], Name FROM sys.procedures;
Resultado:
+----------+----------------------+ | Schema | Name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Esta vista hereda el type
columna de sys.objects
para que puedas filtrar los resultados por tipo de trámite si lo deseas.
SELECT SCHEMA_NAME(schema_id), name FROM sys.procedures WHERE type = 'P';
En mi caso, obtengo el mismo resultado porque mis dos procedimientos son de tipo "P".
En caso de que se lo pregunte, esto es lo que significa cada tipo.
- P
- Procedimiento almacenado de SQL
- X
- Procedimiento almacenado extendido
- RF
- Procedimiento de filtro de replicación
- ordenador
- Procedimiento almacenado de ensamblaje (CLR)
Devolver la definición del procedimiento
Los sys.procedures
view no incluye una columna para la definición del objeto. Al igual que con el método anterior, si desea devolver la definición de cada procedimiento almacenado, puede unirlo con sys.sql_modules
vista del sistema.
Ejemplo:
SELECT definition FROM sys.procedures p INNER JOIN sys.sql_modules m ON p.object_id = m.object_id;