Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membetulkan 'Kiraan transaksi selepas EXECUTE menunjukkan bilangan yang tidak sepadan bagi penyata BEGIN dan COMMIT' Ralat dalam Prosedur Tersimpan?
Kiraan BEGIN-COMMIT Tidak Padan: Ralat Kiraan Transaksi
Dalam senario di mana prosedur tersimpan memanggil prosedur tersimpan lain dalam pernyataan EXECUTE, satu ralat mungkin berlaku jika kiraan transaksi tidak sepadan. Mesej ralat berikut menggambarkan isu ini:
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0
Punca Punca
Ralat ini biasanya berlaku apabila prosedur disimpan pemanggil memulakan transaksi (dengan BERMULA) dan penerima prosedur tersimpan tidak mengendalikan transaksi dengan betul pengecualian.
Penyiasatan
Setelah menyemak kod, didapati bahawa prosedur yang disimpan penerima tidak menyemak pengguguran transaksi atau transaksi tanpa komitmen dalam blok TRY/CATCHnya . Apabila pengecualian berlaku, urus niaga harus dikendalikan dengan betul.
Penyelesaian
Untuk menyelesaikan isu ini, prosedur tersimpan penerima hendaklah diubah suai untuk memasukkan pengendalian keadaan transaksi yang betul . Contoh berikut menunjukkan pendekatan yang disyorkan:
CREATE PROCEDURE [usp_my_procedure_name] AS BEGIN SET NOCOUNT ON; DECLARE @trancount INT; SET @trancount = @@TRANCOUNT; BEGIN TRY IF @trancount = 0 BEGIN TRANSACTION ELSE SAVE TRANSACTION usp_my_procedure_name; -- Do the actual work here label exit: IF @trancount = 0 COMMIT; END TRY BEGIN CATCH DECLARE @error INT, @message VARCHAR(4000), @xstate INT; SELECT @error = ERROR_NUMBER(), @message = ERROR_MESSAGE(), @xstate = XACT_STATE(); IF @xstate = -1 ROLLBACK; IF @xstate = 1 AND @trancount = 0 ROLLBACK IF @xstate = 1 AND @trancount > 0 ROLLBACK TRANSACTION usp_my_procedure_name; RAISERROR ('usp_my_procedure_name: %d: %s', 16, 1, @error, @message); END CATCH END GO
Sumber Tambahan
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan 'Kiraan transaksi selepas EXECUTE menunjukkan bilangan yang tidak sepadan bagi penyata BEGIN dan COMMIT' Ralat dalam Prosedur Tersimpan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!