Como obtener los nombres y parámetros de un procedimiento almacenado en SQL Server

Hace algún tiempo hemos tratado de hacer código re-utilizable y llevamos algo de camino andado. El problema planteado hoy, es que una vez definido(s) nuestro(s) procedimiento(s) almacenado(s), como podría consultar su nombre, sus parámetros, tipos de datos de los parámetros y una serie datos necesarios que necesitamos para ejecutarlo desde algún lenguaje de programación.

Los motores de datos cuentan con su propio diccionario de datos que son una maravilla. El Blog DbLearner  hay un artículo para saber el nombre de las tablas columnas y tipos, la lógica sería igual, aunque yo me fui a ver que tenían las vistas que se generan en SQL Server y de ahí preparar el query que me devolverá lo que necesito. En este caso estoy usando una base de datos SQL Server Express 2014.

Antes hice un procedimiento almacenado llamado CHECKLOGINPASS, aquí el código:

USE [BDALUMNOS]
GO
/****** Object: StoredProcedure [dbo].[CHECKLOGINPASS] Script Date: 2/28/2018 11:33:52 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
— =============================================
— Author: <Author,,Name>
— Create date: <Create Date,,>
— Description: <Description,,>
— =============================================
CREATE PROCEDURE [dbo].[CHECKLOGINPASS]
@PUSER VARCHAR(35),
@PPASS VARCHAR(50),
@ISPRESENT INT output
AS
BEGIN
— SET NOCOUNT ON added to prevent extra result sets from
— interfering with SELECT statements.
SET NOCOUNT ON;

— Insert statements for procedure here
SELECT @ISPRESENT=COUNT(*) FROM USERS WHERE USERNAME=@PUSER AND PASSWORD=@PPASS
END

Bueno seguimos leyendo y buscando las vistas necesarias para nuestro objetivo, en primera pensé que había una vista especifica para procedimientos almacenados y después de consultarlas y viendo que el resultado era vació, me fui a la madre de todas las vistas sys.all_objects. Para mi ejemplo tendré el nombre del procedimiento almacenado, por lo que de una vez ajusto la consulta.

Me doy cuenta que tengo un sys.all_parameters y yo tengo un object_id, con eso puedo tener los parámetros para ese procedimiento almacenado. Hacemos la consulta.

Y como se puede observar tenemos un system_type_id, que en principio encontré dos vistas, y al final consulté sys.types en lugar de sys.systypes (un DBA que sepa la diferencia y me la comparta se lo agradeceré) debido al nombrado igual de sus llaves.

Entonces hacemos nuestra consulta (amazing query jejeje) de la siguiente manera:

Y en mi caso tengo la materia prima para ejecutar mi procedimiento almacenado desde el lenguaje de programación que en mi caso es C#.

Hasta la vista y nos seguimos leyendo.

Atte.

Profesor Miguel Araujo.

 

Deja un comentario