Ошибка в строке транзакции отката
Error appears when I uncomment Rollback transaction line after OutputID=-1 I want to rollback the transaction if any of the serial number is not matching for a particular OrderID. Can you please help me where am i going wrong with the transactions. Begin and Commit Statements looks fine for me.Verified all the begin commit statements through out the proc
Ниже приведена ошибка
Количество транзакций после выполнения указывает на несоответствие числа операторов BEGIN и COMMIT. Предыдущий отсчет = 0, Текущий отсчет = 1
ALTER PROC dbo.UpdatePartnerSerialNumbersBatchDetails @OrderID INT , @SerialNumberDetails XML = NULL , @SerialNumbersCount INT , @UploadedBy VARCHAR(50) , @UploadedDate DATETIME , @OutputID INT OUT AS BEGIN SET XACT_ABORT, NOCOUNT ON; BEGIN TRY DECLARE @BatchCount INT; IF @SerialNumbersCount <> (SELECT TOP 1 OrderQty FROM OrderMaster WHERE OrderID = @OrderID AND IsDeleted = 0) BEGIN SET @OutputID = -2; END; ELSE BEGIN BEGIN TRANSACTION SerialNumbers; UPDATE dbo.PartnerSerialNumbers SET BatchNo = T.N.value('(BatchNo/text())[1]', 'varchar(50)') , DataUploadfromPartner = 1 , ExpiryDate = T.N.value('(ExpiryDate/text())[1]', 'Datetime') , SerialNoStatus = 'O' , UploadedBy = @UploadedBy , UploadedDate = @UploadedDate FROM @SerialNumberDetails.nodes('Root/SerialNumberDetails') AS T(N) WHERE OrderID = @OrderID AND SerialNo = T.N.value('(SerialNumber/text())[1]', 'varchar(50)'); SET @BatchCount = @@ROWCOUNT; IF @BatchCount <> (SELECT TOP 1 OrderQty FROM OrderMaster WHERE OrderID = @OrderID AND IsDeleted = 0) BEGIN SET @OutputID = -1; ROLLBACK TRANSACTION SerialNumbers; END; ELSE BEGIN SET @OutputID = 1; UPDATE OrderMaster SET DataUploadfromPartner = 1 WHERE OrderID = @OrderID; INSERT INTO SerialnumbersLogDetails ( OrderID , SerialNo , GTINCode , OrderSentDate , OrderorPartner , BatchNo , ExpiryDate ) SELECT OrderID , SerialNo , GTINCode , NULL , 'Partner' , BatchNo , ExpiryDate FROM PartnerSerialNumbers WHERE OrderID = @OrderID; END; COMMIT TRANSACTION SerialNumbers; END; END TRY BEGIN CATCH SET @OutputID = 0; IF @@trancount > 0 ROLLBACK TRANSACTION SerialNumbers; END CATCH; END;
Что я уже пробовал:
Когда я прокомментировал это
BEGIN SET @OutputID = -1; -- ROLLBACK TRANSACTION SerialNumbers; END;
Это прекрасно работает.
Richard Deeming
А ошибка есть?
Prathap Gangireddy
Извините..обновил вопрос
0x01AA
Не должно быть COMMIT TRANSACTION SerialNumbers;
быть в квартале наверху? Для меня это выглядит так, как будто вы совершаете даже после отката.
Prathap Gangireddy
Это обычный код, который я пишу большую часть времени..синтаксически все кажется прекрасным..но когда я пытаюсь отправить данные из переднего плана в хранимую процедуру, он выдает ошибку. Еще я пробовал с фиктивными данными в management studio и он возвращает -1 без каких-либо проблем