Fråga : Xact_state eller @@ TranCount som ska behandlas, bygga bo transaktionsrollbacks

Hi alla,

I har en lagerproc som appeller en recursive lagerproc, som kan i sin tur appell några andra. Alla är att uppdatera som är olikt, bordlägger etc. i systemet och all start med en transaktion. Jag har ett försök att fånga kvarteret runt om kodifiera och att rulla tillbaka på fel.  Bugga som jag fick, var….,för ROLLBACKTRANSAKTIONEN för

The förfråganen har inget motsvara BÖRJA TRANSACTION.

SO, efter läsning a bet mer på transaktioner som jag ser nu att, om en rollback kallas på en bygga bo transaktion den rullar tillbaka till den annan transaktionen. När jag fångar försök för fel I att rulla det som är tillbaka och att kasta på felet till den kallande lagerprocen. De kallande försöken för tillvägagångssättet därefter en rullbaksida men där är inga. Detta som jag verkar för att förstå, och den gör nu sense.

However (ifrågasätta, för jag borrar all dig) jag såg väg att behandla detta och inte vet huruvida för att använda Xact_state, eller @@trancount som ska avgöras huruvida att rulla tillbaka, eller not.

So i varje fångar mig gick att sätta något kodifierar något liknande. för storproc
för

start somen för delcare… stoppar…
BEGIN TRY
BÖRJAR TRANSACTION
… gör någon stuff
BEGÅR TRANS
END TRY
BEGIN CATCH
        -- rulla endast tillbaka, om denna är den yttre tranaction OM (XACT_STATE () = -1) OCH (@@TranCount = 1) ROLLBACKEN TRANS

för
         -- bygg en VALD @errorMsg för felstring
= OBJECT_NAME (@@PROCID) + ”: ”+ cast (XACT_STATE () som varchar (3))  +”, --  @@TranCount =” + cast (@@TranCount som varchar (3))      
          --kasta för felon
RAISERROR (@errorMsg, @errorSev, @errorState) AVSLUTAR FÅNGAR
… för att avsluta lagerproc

Do som jag behöver XACT_STATEN eller använder precis @@Trancounten.  Också jag märkte i avlusaren i SQL 2008 som, om jag satte en klocka på @@TranCountvariabeln, det minimalt mig skrev in lagerprocen som, den går ökat, och inte då jag excuted meddelandet…, Börja transaktionen. Samma, då jag kallade rullbaksidaen… det, förminskade inte, only, när de lämnade lagerprocen… några idéer eller är detta rättvist avlusaren eller SQL-serveren som vet att den har en transaktion som ska startas på något sätt??

thanks M
" klar "

Svar : Xact_state eller @@ TranCount som ska behandlas, bygga bo transaktionsrollbacks

Andra lösningar  
 
programming4us programming4us