Olá! todos,
I têm um proc da loja que chame um proc recursive da loja que por sua vez possa chamar alguns outro. Todos estão atualizando as tabelas diferentes etc. em sistema e em todo o começo com uma transação. Eu tenho um bloco do prendedor da tentativa em torno do código e rolo para trás em erros. O erro que eu começ era….o pedido da TRANSAÇÃO do ROLLBACK do
The não tem nenhuma correspondência PARA COMEÇAR TRANSACTION.
SO depois que lendo um pouco mais em transações que eu ver agora que se um rollback é convidado uma transação aninhada rola de volta à outra transação. Quando eu travo o erro mim tentar rolá-lo para trás e jogar sobre o erro ao proc de chamada da loja. O procedimento de chamada tenta então um rolo para trás mas não há nenhuns. Isto eu pareço compreender e faz agora sense.
However (a pergunta antes que eu o fure todo) que eu olhava maneiras de segurar isto e não sei se usar Xact_state ou @@trancount para decidir se rolar para trás ou not.
So em cada prendedor eu estava indo põr algum código como. o BEGIN TRY do material do som do delcare do proc do stor do
start…… COMEÇA TRANSACTION … faz algum stuff COMETE TRANS END TRY BEGIN CATCH -- rolar somente para trás se este é o tranaction SE (XACT_STATE () = -1) E (@@TranCount = 1) ROLLBACK TRANS
do -- construir um @errorMsg do string do erro = um OBJECT_NAME SELETOS (@@PROCID) + “: “+ moldado (XACT_STATE () como varchar (3)) +” -- o @@TranCount =” + moldou (@@TranCount como varchar (3)) --jogar o proc
Do que da loja da extremidade do do PRENDEDOR da EXTREMIDADE do do on RAISERROR do erro (@errorMsg, @errorSev, @errorState)… eu preciso o XACT_STATE ou apenas uso o @@Trancount. Igualmente eu observei no depurador de programas em SQL 2008 que se eu põr um relógio sobre a variável do @@TranCount, o minuto eu incorporei o proc que da loja vai incrementado e não quando eu excuted a indicação… Começar a transação. O mesmos quando eu lhe chamei o rolo para trás… não decresceram, simplesmente ao deixar ao proc da loja… nenhuma idéias nem são este apenas o depurador de programas ou usuário do SQL que sabe que têm uma transação a começar de qualquer maneira??
thanks M
class= do
|