存储过程中的事务和回滚

编程入门 行业动态 更新时间:2024-10-28 12:24:15
本文介绍了存储过程中的事务和回滚的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

先生,我有一个存储过程,其中包含多个查询..我想在其中添加事务和回滚。因此,当任何查询中出现任何错误时,则所有查询都将回滚。我的程序是: -

Sir i have a Store Procedure with more then one query in it..i want to add Transaction and rollback in that. So when any Error Occur in any query then all query are rollback. My Procedure is:-

ALTER PROCEDURE [dbo].[FeeReceipt] @DocId int , @SessionID int, @StudentID smallint, @ClassesID int, @SectionID int, @FatherName varchar(250) , @AdmissionNo varchar(50), @Student varchar(100), @ScholarType varchar(20), @Stopage varchar(50), @RouteNo varchar(50), @Remark varchar(250), @UserID int, @FeeReceived int, @FineReceived int, @RoundOff int, @Total int, @Dated datetime, @TransTypeID int, @Narration varchar(100), @DocNo varchar(50), @AccountID int, @Paymentby varchar(50), @PaymentDesc varchar(100), @DOC datetime, @Bank int, @Branch varchar(50), @AccountIDRoundOff int, @AmountRoundOff int, @AmountIDFine int, ----------- @Str varchar(500), -------- @Str1 varchar(250), --------------- @new_identity nvarchar(100) OUTPUT AS BEGIN Declare @Voucherid int SET NOCOUNT ON; Insert into voucher (CID,StudentID,Dated,TransTypeID,Narration,Amount,DocNo,UserID) values(0,@StudentID,@Dated,@TransTypeID,@Narration,@Total,@DocNo,@UserID) SELECT @Voucherid = SCOPE_IDENTITY() FROM Voucher Insert into FeeTrans (StudentID,FeeTransID,Docno,Dated,ClassesID,SectionID,FatherName,AdmissionNo,Student,FeeReceived,FineReceived,ScholarType,RouteNo,Stopage,RoundOff,Total,Remark) values(@StudentID,@Voucherid,@DocNo,@Dated,@ClassesID,@SectionID,@FatherName,@AdmissionNo,@Student,@FeeReceived ,@FineReceived,@ScholarType,@RouteNo,@Stopage,@RoundOff,@Total,@Remark) DELETE FROM VoucherItem WHERE VoucherID =@Voucherid INSERT INTO VoucherItem (VoucherID, SideID, AccountID, Amount, Paymentby, PaymentDesc, DOC, Bank, Branch, AgainstID) VALUES (@Voucherid,1,@AccountID,@Total,@Paymentby,@PaymentDesc,@DOC,@Bank,@Branch,Null) If (@AmountRoundOff) < 0 begin INSERT INTO VoucherItem (VoucherID, SideID, AccountID, Amount, AgainstID) VALUES (@Voucherid,1,@AccountIDRoundOff,abs(@AmountRoundOff),Null) end Delete from FeeTransItem where FeeTransID=@DocId if not @Str ='' begin Insert into FeeTransItem(FeeTransID,SessionID,FeeHeadID,MNameID,Amount) select * from [dbo].[fn_ArrayTable] (@VoucherID,@SessionID, @str ,'/') end if not @Str1='' begin Insert into FeeTransItem(FeeTransID,SessionID,FeeHeadID,Amount) select * from [dbo].[fn_ArrayTable2] (@VoucherID, @str1 ,'/') end INSERT INTO VoucherItem (VoucherID, SideID, AccountID, Amount) SELECT FeeTransID, 2 AS Expr2, FeeheadID, SUM(Amount) AS Expr1 From FeeTransItem Where (FeeTransID = @VoucherID ) GROUP BY FeeTransID, FeeheadID If (@FeeReceived) < 0 begin INSERT INTO VoucherItem (VoucherID, SideID, AccountID, Amount, AgainstID) VALUES (@VoucherID,1,@AmountIDFine,abs(@FeeReceived),Null) end IF (@FeeReceived) > 0 begin INSERT INTO VoucherItem (VoucherID, SideID, AccountID, Amount, AgainstID) VALUES (@VoucherID,2,@AmountIDFine,abs(@FeeReceived),Null) end If (@RoundOff) > 0 begin INSERT INTO VoucherItem (VoucherID, SideID, AccountID, Amount, AgainstID) VALUES (@VoucherID,2,@AccountIDRoundOff,abs(@AmountRoundOff),Null) end UPDATE VoucherItem SET AgainstID = (SELECT TOP (1) AccountID FROM VoucherItem AS VoucherItem_1 Where (VoucherID = VoucherItem.VoucherID) And (SideID <> VoucherItem.SideID) ORDER BY VoucherItemID) WHERE (VoucherID = @VoucherID) SELECT @new_identity= convert(varchar, @Voucherid) End

推荐答案

有很多方法可以处理它。您可以使用Try Catch或者您可以检查@@ Error并使用GOTO语句跳转到您回滚事务的底部。 许多在线示例,例如 stackoverflow/questions/1749719/sql-server-transactions-回滚错误 [ ^ ] stackoverflow/questions/3935900/how-to-commit-and-rollback-transaction-in-sql-server [ ^ ] 另外,这里有一篇好文章是 SQL Server事务和错误处理 [ ^ ] There are numerous ways of handling it. You can use Try Catch or you can check @@Error and use a GOTO statement to jump to the bottom where you rollback the transaction. Many examples online, such as stackoverflow/questions/1749719/sql-server-transactions-roll-back-on-error[^] stackoverflow/questions/3935900/how-to-commit-and-rollback-transaction-in-sql-server[^] Also, a good article here is SQL Server Transactions and Error Handling[^]

更多推荐

存储过程中的事务和回滚

本文发布于:2023-10-12 20:41:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1485839.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:过程中   事务

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!