Cele două puncte nu sunt exclusive. Dacă ai timp încearcă să găsești cauza/ele apariției deadlock-ului.
Încearcă să folosești tranzacții plus TRY ... CATCH și la nivelul procedurii ExecTran.
Dpmdv RETURN -1 și RAISERROR sunt redundante în sensul că ambele semnalează apelantului apariția unei erori la nivelul procedurii VirareSal. Ai motive să folosești ambele soluții ?
Dacă dorești să returnezi mesajul ”Suma a fost virată ...” poți să folosești un parametru OUTPUT în loc de RAISERROR(...,1,1).
RAISERROR poate fi utilizată la fel ca funcția printf din C:
RAISERROR('Eroare %s in procedura %s linia %d', @Sev, 1, @ErrMsg, @ErrProc, @ErrLine)