2016-09-10 4 views
1

Ich habe eine gespeicherte Prozedur mit mehreren Update-Anweisungen. Ich möchte nicht versuchen, catch.Wie kann ich die gespeicherte Prozedur zurücksetzen und die ursprüngliche Tabelle zurück erhalten?Rollback eine gesamte gespeicherte Prozedur

kann diese Arbeit so etwas wie -

beginnen Transaktion t1 Servicepunktname Rollback-Transaktion t1

+2

Sie können den Körper der gespeicherten Prozedur in einer einzigen Transaktion umbrechen. –

+0

Warum willst du nicht versuchen fangen. Ihr Proc wird im Grunde nichts tun, außer Sie können Syntaxprobleme debuggen. – scsimon

+0

Die Abfragen in der gespeicherten Prozedur werden jede Woche durch einen Job ausgelöst.Während des Testens, wenn ich die ursprüngliche Tabelle nach dem Ausführen des gespeicherten PRC zurück erhalten möchte, wie bekomme ich die ursprüngliche Tabelle zurück? #scsimon du bist richtig bt meine anforderung ist etwas anderes –

Antwort

2

Ja, Sie können alles in einem sproc in einer Transaktion wickeln

begin tran 
exec testproc 

commit tran 
--rollback tran --for condition 

Es funktioniert gut, auch für commit so gut rollback

Wenn für die Innenseite der Sproc müssen Sie öffnen n eine andere Transaktion dann müssen Sie erfassen

DECLARE @vTranCount INT = @@TRANCOUNT 

--Commit 
IF (@vTranCount = 0 AND @@TRANCOUNT <> 0) COMMIT TRANSACTION --Commit if the Tran is created by this sproc 

--rollback during catch 
IF(@vTranCount = 0 AND @@TRANCOUNT > 0) ROLLBACK TRANSACTION --Rollback if the Tran is created by this sproc