mam dziedziczone kod, który wygląda tak:Wydajność TSQL z @@ Błąd i czy można je wymienić?
procedury zapisane 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;
Ta sp nazywany jest przez ADO.NET w C# jak ten
try
{
myCommand.ExecuteNonQuery();
}
catch (System.Exception ex)
{
_log.Error(ex);
throw();
}
finally
{
if(myConnection!=null)
{
myConnection.Close();
}
}
Ja tylko pytam myself: Czy część JEŻELI @@ Błąd> 0 Czy można uzyskać cokolwiek z ERR? Jeśli wystąpi błąd, sp i tak wróci, a wyjątek zostanie przechwycony w metodzie wywołania.
Kod wywołujący nie obsługuje wartości zwracanej 0 i -1. Mój plan polegał na usunięciu wszystkich operacji obsługi błędów w procedurze przechowywanej i uzyskania tego samego wyniku. Mam rację, czy jest coś, co przeoczyłem?
Nie, jeśli wystąpi błąd, pozostałe instrukcje SP będą nadal wykonywane. Jeśli intencją jest NIE kontynuowanie wykonywania pozostałego T-SQL, musisz zachować kontrole błędów na miejscu. Ale jestem zaskoczony, że nie ma żadnych transakcji związanych z oryginalnym SP. – HardCode