Alex:nu pot modifica absolut nimic in procedura2....regulile firmei....exista o alta solutie?
multumesc
alex.
O solutie buna e cea propusa de andrei
...
begin tran
DECLARE @RC int
EXECUTE @RC = procedura2
if @RC = 0
begin
Rollback tran
return
...dar pleaca de la premisa ca procedura2 intoarce un INT care reflecta daca procedura sa executat sau nu cu succes. Banuiesc ca aceasta solutie ar pp. modificarea procedurii 2 fapt care nu se doreste.
Ceea ce vrei tu ar putea fi denumita de un coleg ca o "ciobănie" sau un "oltenism".
O posibila ideea ar fi sa verifici daca sunt prezente in baza de date anumite rezultate (valori, inregistrari, etc.) care sa indice daca procedura2 sa executat cu succes sau nu.
De exemplu, putem pp. ca procedura2 daca este executata cu succes atunci rezultatul va fi ca in tabela A sunt adaugate inregistrari (minim o inregistrare). Daca nu, atunci nr. inregistrarilor din A va râmâne nemodificat dupa execuţia procedurii 2.
...
begin tran
DECLARE @nr_inregistrari_inainte INT
DECLARE @nr_inregistrari_dupa INT
SET @nr_inregistrari_inainte = (SELECT COUNT(*) FROM A)
EXEC procedura2
SET @nr_inregistrari_dupa = (SELECT COUNT(*) FROM A)
if @nr_inregistrari_inainte = @nr_inregistrari_dupa
begin
Rollback tran
return
...
Evident tb. avut in vedere faptul ca aplicatia ruleaza intr-un mediu multutilizator ...