he heredado código que se parece a esto:Rendimiento TSQL con @@ Error y ¿Pueden ser reemplazados?
procedimiento almacenado UpdateSomeStuff
Update Table1 Set [email protected]
IF @@Error > 0 Goto ERR
Update Table2 Set [email protected]
IF @@Error > 0 Goto ERR
RETURN 0
ERR:
return -1;
este SP es llamado por ADO.NET en C# como éste
try
{
myCommand.ExecuteNonQuery();
}
catch (System.Exception ex)
{
_log.Error(ex);
throw();
}
finally
{
if(myConnection!=null)
{
myConnection.Close();
}
}
yo sólo pido yo mismo: ¿Es la parte IF @@ Error> 0 Goto ERR bueno para algo? Si ocurre un error, la sp regresará de todos modos y se detectará una excepción en el método de llamada.
El código de llamada no maneja el valor de retorno 0 y -1. Mi plan sería eliminar todo el manejo de errores en el procedimiento almacenado y tener el mismo resultado. ¿Estoy en lo cierto o hay algo que eché de menos?
No, si hay un error, las sentencias restantes del SP seguirán ejecutándose. Si la intención es NO continuar la ejecución del T-SQL restante, debe mantener las comprobaciones de errores en su lugar. Pero me sorprende que no haya transacciones involucradas en el SP original. – HardCode