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

Devolver procedimientos y funciones almacenados en una base de datos de SQL Server:RUTINAS (ejemplos de T-SQL)

En SQL Server, puede usar Transact-SQL ROUTINES vista de esquema de información del sistema para devolver una lista de procedimientos y funciones almacenados en la base de datos actual.

Más específicamente, devuelve una lista de todos los procedimientos y funciones almacenados a los que puede acceder el usuario actual en la base de datos actual.

También puedes usar ROUTINES simplemente para devolver información sobre un procedimiento o función específica si es necesario.

Para usar esta vista, use el nombre completo de INFORMATION_SCHEMA.ROUTINES .

Ejemplo 1:devolver todas las rutinas

Aquí hay un ejemplo rápido que devuelve todos los procedimientos y funciones almacenados en la base de datos actual (a la que tiene acceso el usuario actual).

USE Music;
SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES;

Resultado:

Changed database context to 'Music'.
+-------------------+------------------+----------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME         | ROUTINE_TYPE   |
|-------------------+------------------+----------------------+----------------|
| Music             | dbo              | ISOweek              | FUNCTION       |
| Music             | dbo              | ufn_AlbumsByGenre    | FUNCTION       |
| Music             | dbo              | spAlbumsFromArtist   | PROCEDURE      |
| Music             | dbo              | uspGetAlbumsByArtist | PROCEDURE      |
+-------------------+------------------+----------------------+----------------+
(4 rows affected)

Estos resultados me muestran que hay dos funciones y dos procedimientos a los que tengo acceso en la base de datos "Música".

La vista devuelve una gran cantidad de columnas, por lo que en este ejemplo reduje las columnas a solo cuatro.

Ejemplo 2:encontrar una rutina específica

Si lo prefiere, también puede restringir los resultados a un procedimiento o función determinados.

En este ejemplo incluyo todas las columnas. Uso la salida vertical para que no te veas obligado a desplazarte horizontalmente.

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

Resultado (usando salida vertical):

-[ RECORD 1 ]-------------------------
SPECIFIC_CATALOG         | Music
SPECIFIC_SCHEMA          | dbo
SPECIFIC_NAME            | uspGetAlbumsByArtist
ROUTINE_CATALOG          | Music
ROUTINE_SCHEMA           | dbo
ROUTINE_NAME             | uspGetAlbumsByArtist
ROUTINE_TYPE             | PROCEDURE
MODULE_CATALOG           | NULL
MODULE_SCHEMA            | NULL
MODULE_NAME              | NULL
UDT_CATALOG              | NULL
UDT_SCHEMA               | NULL
UDT_NAME                 | NULL
DATA_TYPE                | NULL
CHARACTER_MAXIMUM_LENGTH | NULL
CHARACTER_OCTET_LENGTH   | NULL
COLLATION_CATALOG        | NULL
COLLATION_SCHEMA         | NULL
COLLATION_NAME           | NULL
CHARACTER_SET_CATALOG    | NULL
CHARACTER_SET_SCHEMA     | NULL
CHARACTER_SET_NAME       | NULL
NUMERIC_PRECISION        | NULL
NUMERIC_PRECISION_RADIX  | NULL
NUMERIC_SCALE            | NULL
DATETIME_PRECISION       | NULL
INTERVAL_TYPE            | NULL
INTERVAL_PRECISION       | NULL
TYPE_UDT_CATALOG         | NULL
TYPE_UDT_SCHEMA          | NULL
TYPE_UDT_NAME            | NULL
SCOPE_CATALOG            | NULL
SCOPE_SCHEMA             | NULL
SCOPE_NAME               | NULL
MAXIMUM_CARDINALITY      | NULL
DTD_IDENTIFIER           | NULL
ROUTINE_BODY             | SQL
ROUTINE_DEFINITION       | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
SELECT AlbumName
FROM [fdec67e6a28d].[Music].[dbo].[Albums]
WHERE ArtistId = @ArtistId
EXTERNAL_NAME            | NULL
EXTERNAL_LANGUAGE        | NULL
PARAMETER_STYLE          | NULL
IS_DETERMINISTIC         | NO
SQL_DATA_ACCESS          | MODIFIES
IS_NULL_CALL             | NULL
SQL_PATH                 | NULL
SCHEMA_LEVEL_ROUTINE     | YES
MAX_DYNAMIC_RESULT_SETS  | -1
IS_USER_DEFINED_CAST     | NO
IS_IMPLICITLY_INVOCABLE  | NO
CREATED                  | 2019-10-26 01:11:30.677
LAST_ALTERED             | 2019-10-26 03:50:42.527
(1 row affected)

Notará que muchas de las columnas tienen valores nulos. La documentación de Microsoft para esta vista indica que muchas de estas columnas siempre devuelven NULL . También establece que algunos de ellos están reservados para uso futuro.

Ejemplo 3:solo procedimientos de devolución

Puedes usar un WHERE cláusula para filtrar los resultados a solo procedimientos almacenados o solo funciones.

Este ejemplo solo devuelve procedimientos almacenados.

SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE';

Resultado:

+-------------------+------------------+----------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME         | ROUTINE_TYPE   |
|-------------------+------------------+----------------------+----------------|
| Music             | dbo              | spAlbumsFromArtist   | PROCEDURE      |
| Music             | dbo              | uspGetAlbumsByArtist | PROCEDURE      |
+-------------------+------------------+----------------------+----------------+
(2 rows affected)

Ejemplo 4:solo funciones de retorno

Este ejemplo solo devuelve funciones.

SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION';

Resultado:

+-------------------+------------------+-------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME      | ROUTINE_TYPE   |
|-------------------+------------------+-------------------+----------------|
| Music             | dbo              | ISOweek           | FUNCTION       |
| Music             | dbo              | ufn_AlbumsByGenre | FUNCTION       |
+-------------------+------------------+-------------------+----------------+
(2 rows affected)