You are on page 1of 4

Guía 07.

Implementación de la gestión de errores


Curso: Consultas avanzadas de datos con Transact-SQL
Tiempo de ejecución: 2 horas

I. AMBIENTE DE LABORATORIO

Para esta práctica se conectará al servidor con los siguientes parámetros:

Host: 162.248.53.71
Base de datos: AdventureWorks2014

Usuario: capacitacion
Password: Nuevo1010$

II. OBJETIVOS
Que el Estudiante aprenda:
❑ Crear y administrar procedimientos almacenados
❑ Optimizar el desempeño de SQL utilizando procedimientos almacenados.

II. DESARROLLO

Ejercicio 1:
Componentes de captura del error

❑ Implemente el siguiente bloque de codigo y revise los resultados obtenidos

BEGIN TRY
-- Generate a divide-by-zero error
SELECT
1 / 0 AS Error;
END TRY

BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_STATE() AS ErrorState,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH;

❑ Ingrese el codigo anterior en un procedimiento almacenado y pruebe el resultado


¿Qué diferencias encontró con la ejecución anterior?

1
Ejercicio 2:
Seguimiento de errores

❑ Cree la siguiente tabla para la captura de errores

CREATE TABLE DB_Errors_GX


(ErrorID INT IDENTITY(1, 1),
UserName VARCHAR(100),
ErrorNumber INT,
ErrorState INT,
ErrorSeverity INT,
ErrorLine INT,
ErrorProcedure VARCHAR(MAX),
ErrorMessage VARCHAR(MAX),
ErrorDateTime DATETIME)
GO

❑ Realice el siguiente procedimiento para probar la estructura creada

CREATE PROCEDURE dbo.AddSale_GX


@saleid INT,
@productid INT,
@quantity SMALLINT

AS
BEGIN TRY
INSERT INTO Sales.SalesOrderDetail(SalesOrderID, ProductID, OrderQty)
SELECT
@saleid,
@productid,
@quantity
END TRY
BEGIN CATCH
INSERT INTO dbo.DB_Errors_GX
VALUES
(SUSER_SNAME(),
ERROR_NUMBER(),
ERROR_STATE(),
ERROR_SEVERITY(),
ERROR_LINE(),
ERROR_PROCEDURE(),
ERROR_MESSAGE(),
GETDATE());
END CATCH
GO

❑ Este procedimiento contiene un error intencional para capturar el evento en la


nueva estructura
❑ Revise la cantidad de datos que se tienen en la estructura creada

SELECT *FROM Sales.SalesOrderDetail;

2
❑ Ejecute el procedimiento para probar su ejecución

Exec dbo.addSale_GX 20,1,12

❑ Revise nuevamente la cantidad de registros, ¿se alteró?

SELECT *FROM Sales.SalesOrderDetail;

❑ Revise el error que se capturo

SELECT *FROM dbo.DB_Errors_GX;

❑ Modifique el procedimiento almacenado para que se ejecute correctamente


❑ Cree un procedimiento separado que permita la escritura en la tabla para el
manejo de errores
❑ Pruebe otros tipos de error a generarse (revise los constraints)

Ejercicio 3
Errores personalizados

❑ Realice el siguiente procedimiento almacenado

CREATE PROCEDURE dbo.Test_employee_GX @employeeid INT

AS
BEGIN TRY
IF (SELECT COUNT(*) FROM HumanResources.Employee e WHERE BusinessEntityID =
@employeeid) = 0
RAISERROR ('EmployeeID does not exist.', 11, 1)

END TRY

BEGIN CATCH
INSERT INTO dbo.DB_Errors
VALUES
(SUSER_SNAME(),

3
ERROR_NUMBER(),
ERROR_STATE(),
ERROR_SEVERITY(),
ERROR_LINE(),
ERROR_PROCEDURE(),
ERROR_MESSAGE(),
GETDATE());

DECLARE @Message varchar(MAX) = ERROR_MESSAGE(),


@Severity int = ERROR_SEVERITY(),
@State smallint = ERROR_STATE()

RAISERROR (@Message, @Severity, @State)


END CATCH
GO

❑ Ejecute el proceso realizado

exec Test_employee_GX 500;

❑ Personalice otro mensaje de error para esta ejecución

Ejercicio 4
Realice los siguientes ejercicios para manejo de errores:

❑ Realice un procedimiento similar al ejercicio #1 para que acepte 2 números por


medio de parámetros y reproduzca el error obtenido.

❑ Construya un SP similar al ejercicio 2 para que haga uso de la tabla DB_Errors_GX y


que inserte información en la tabla HumanResources.Department.

❑ Construya un SP similar al ejercicio 3 para que haga uso de la tabla DB_Errors y


RAISERROR, que actualice la información de la tabla HumanResources.Employee

You might also like