Cuando escribimos procedimientos almacenados, lógica de negocio que va a ejecutarse en el propio servidor de datos generalmente a demanda de las aplicaciones, el control de los posibles errores es un aspecto especialmente importante y delicado. Un fallo en un procedimiento almacenado se propagaría a todos los potenciales clientes, lo que puede significar dejar de atender a cientos o miles de usuarios.
En SQL Server el control de errores se lleva a cabo tradicionalmente mediante la consulta reiterada de la variable @@ERROR
tras cada operación. Si dicha variable indica que la operación no ha tenido éxito el código puede proceder adecuadamente, por ejemplo revocando una transacción en lugar de confirmándola. En SQL Server 2005 existe una construcción de más alto nivel, similar a la de algunos lenguajes de programación, que permite controlar los errores sin tener que comprobar a cada paso la mencionada variable. Su sintaxis es la siguiente:
BEGIN TRY /* sentencias que deben ejecutarse */ COMMIT TRANSACTION END TRY BEGIN CATCH /* Control del error */ END CATCH
En el bloque BEGIN CATCH
/END CATCH
pueden utilizarse funciones como XACT_STATE()
, ERROR_NUMBER()
y ERROR_STATE()
para saber si había o no transacciones en curso y su estado, obtener el código y el estado de error a fin de proceder como mejor convenga.
Torre de Babel - Francisco Charte Ojeda - Desde 1997 en la Web