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 "
|