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.
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.”
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