Procedimientos almacenados ordenados

Los procedimientos almacenados () son un elemento importante en el desarrollo de aplicaciones con SQL Server. Al ser un componente de programación, su implementación y mantenimiento son vitales para el correcto funcionamiento de los sistemas. Un aspecto importante a tener en cuenta es el orden que se debe aplicar cuando se construye un procedimiento almacenado. En este artículo proponemos una plantilla básica sobre la cual se puede comenzar a construir los programas:

Hacer clic en la imagen para bajar el script: 

/*

—————————————————————-

PROPÓSITO | <Breve descripcion del procedure/funcion/Trigger…>

—————————————————————-

PARÁMETROS

DE ENTRADA| @InParam1 – <Descripcion del parámetro de entrada 1>

          | @InParam2 – <Descripcion del parámetro de entrada 2>

—————————————————————-

PARÁMETROS

DE SALIDA | @OutParam2 – <Descripcion del parámetro de salida 1>

          | @OutParam2 – <Descripcion del parámetro de salida 2>

—————————————————————-

CREADO POR     | <Nombre del Creador>

FECHA CREACIÓN | DD/MM/AAAA           

—————————————————————-

HISTORIAL

DE CAMBIOS | FECHA      RESPONSABLE         MOTIVO

           | ———- ——————- ——————–

           | DD/MM/AAAA <nombre>            <detalle del cambio>

—————————————————————-

PRUEBA:             

  EXECUTE usp_mi procedure

     @InParam1 = ”, InParam2 = ”, OutParam2 OUT, OutParam2 OUT

————————————————————–*/

CREATE PROC dbo.MiProc

@InParam1 <tipodato>,

@InParam2 <tipodato>

AS

 

SET NoCount ON

 

BEGIN TRY

  –Incluir código aquí

END TRY

BEGIN CATCH

  –Incluir rutina de manejo de errores aquí

END CATCH

En la plantilla, lo primero que proponemos es la inclusión de una cabecera, en la que se registrarán datos importantes sobre el procedimiento, como su descripción, parámetros, fechas de creación y modificación, autores, etc.

SET NoCount ON 

Evita el envió innecesario de información desde el servidor hacia el cliente, disminuyendo el tráfico en la red. Según BOL (Books On Line) con SET NoCount ON se “evita que se devuelva el mensaje que muestra el recuento del número de filas afectadas por una instrucción o un procedimiento almacenado de Transact-SQL como parte del conjunto de resultados.”

TRY y CATCH 

Implementa un adecuado control de errores en los procedimientos almacenados, obviando el uso de la variable @@ERROR para tener que capturar los errores. Además facilita el diseño del flujo de captura de errores. Según BOL (Books On Line) con TRY y CATCH se “Implementa un mecanismo de control de errores para Transact-SQL que es similar al control de excepciones en los lenguajes Microsoft Visual C# y Microsoft Visual C++. Se puede incluir un grupo de instrucciones Transact-SQL en un bloque TRY. Si se produce un error en el bloque TRY, el control se transfiere a otro grupo de instrucciones que está incluido en un bloque CATCH.”

 

A continuación, un ejemplo, en el que se ha incluido otro elemento importante al cuerpo del programa: Los comentarios. Es importante que el desarrollador explique brevemente los pasos que se ejecutan en el programa, de modo que otras personas que requieren interpretar el programa para mantenimento o mejoras, puedan comprenderlo mejor y más rápido

Hacer clic en la imagen para bajar el script: 

/*

——————————————————————-

PROPÓSITO  | Procedimiento de alta de la tabla purchasing.Vendor

——————————————————————-

PARÁMETROS

DE ENTRADA | @AccountNumber – numero de cuenta del proveedor

           | @Name – nombre del proveedor

           | @CreditRating – evaluación de crédito

           | @PreferredVendorStatus – estado de vendedor preferido

           | @PurchasingWebServiceURL – Dirección web del proveedor

——————————————————————-

PARÁMETROS

DE SALIDA  | @Id – Parámetro de retorno de la nueva llave generada

——————————————————————-

CREADO POR     | Alberto De Rossi

FECHA CREACIÓN | 18/05/2008

——————————————————————-

HISTORIAL

DE CAMBIOS | FECHA      RESPONSABLE      MOTIVO

           | ———- —————- ————————–                        

           | 30/07/2009 Guillermo Cáceda Retorno de la llave creada

           | 25/06/2010 Alberto De Rossi Implementación TRY..CATCH

——————————————————————-

PRUEBA              

 DECLARE @LlaveVendor INT

 EXEC @LlaveVendor = purchasing.uspInsertVendor

                     ‘CTA00004’, ‘Las Proveedoras’, 1, 0, null, 0

 SELECT @LlaveVendor

——————————————————————-

*/

ALTER PROCEDURE purchasing.uspInsertVendor

@AccountNumber AccountNumber,

@Name Name,

@CreditRating tinyint,

@PreferredVendorStatus Flag,

@PurchasingWebServiceURL Flag,

@Id int OUT

AS

 

SET NoCount ON

 

BEGIN TRY

  –DEFINE EL VALOR DE LA LLAVE

  SELECT @Id = MAX(BusinessEntityID) + 1 FROM Purchasing.Vendor

 

  –INSERTA EL REGISTRO EN LA TABLA EN BASE A PARAMETROS

  –NOTA, los campos ActiveFlag y ModifiedDate toman los valores por defecto

  INSERT INTO Purchasing.Vendor(

   BusinessEntityID,

   AccountNumber,

   Name,

   CreditRating,

   PreferredVendorStatus,

   PurchasingWebServiceURL)

  VALUES (

   @Id,

   @AccountNumber,

   @Name,

   @CreditRating,

   @PreferredVendorStatus,

   @PurchasingWebServiceURL)

 

   RETURN @Id

END TRY

BEGIN CATCH

  –LISTA INFORMACION DE ERRORES

  SELECT 

    ERROR_NUMBER() AS ErrorNumber,

    ERROR_SEVERITY() AS ErrorSeverity,

    ERROR_PROCEDURE() AS [Procedure],

    ERROR_LINE() AS ErrorLine,

    ERROR_MESSAGE() AS ErrorMessage

END CATCH

GO

 

Deja un comentario

Tu dirección de correo electrónico no será publicada.