sql >> Base de Datos >  >> RDS >> Sqlserver

3 formas de enumerar todos los procedimientos almacenados en una base de datos de SQL Server

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;