数据库删除事务流程

数据库删除事务流程

ID:34772585

大小:55.76 KB

页数:9页

时间:2019-03-10

数据库删除事务流程_第1页
数据库删除事务流程_第2页
数据库删除事务流程_第3页
数据库删除事务流程_第4页
数据库删除事务流程_第5页
资源描述:

《数据库删除事务流程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、代码:ALTERproc[dbo].[DeletedGroup]@GroupIDintASBEGINDECLARE@TranStartedintSET@TranStarted=0IF(@@TRANCOUNT=0)BEGINBEGINTRANSACTIONSET@TranStarted=1ENDELSESET@TranStarted=0DECLARE@ErrorCodeintSET@ErrorCode=0IFEXISTS(SELECT*FROMPrizeGroupWHEREPrizeGroupID=@GroupIDANDIsApproved=1)B

2、EGINRAISERROR('评审小组已批复通过,不可删除!',16,1)SET@ErrorCode=-3GOTOCleanupENDIFEXISTS(SELECT*FROMPrizeGroupExpertWHEREPrizeGroupID=@GroupID)BEGINDELETEPrizeGroupExpertWHEREPrizeGroupID=@GroupIDENDIFEXISTS(SELECT*FROMAchievementWHEREPrizeGroupID=@GroupID)BEGINUPDATEAchievementSETPrizeGr

3、oupID=NULLWHEREPrizeGroupID=@GroupIDdeletefromPrizeGroupAchievementwherePrizeGroupID=@GroupIDENDIFEXISTS(SELECT*FROMPrizeGroupWHEREPrizeGroupID=@GroupIDANDIsHistory=0)BEGINDELETEFROMPrizeGroupWHEREPrizeGroupID=@GroupIDENDIF(@@Error<>0)BEGINSET@ErrorCode=-1GOTOCleanup--这个东西就要写

4、在操作之后,提交之前(个人理解,日后再确定一下)ENDIF(@TranStarted=1)BEGINSET@TranStarted=0COMMITTRANSACTIONENDRETURN0Cleanup:--自定义的函数需要返回(日后再看)IF(@TranStarted=1)BEGINSET@TranStarted=0ROLLBACKTRANSACTIONENDRETURN@ErrorCodeEND心得:1:@@TRANCOUNT的用法在处理事务的时候,一般都用RollBackTransaction来回滚,但是如果在嵌套事务中这样使用的话,就会出

5、现错误。在SqlServer里,嵌套事务的层次是由@@TranCount全局变量反映出来的。每一次BeginTransaction都会引起@@TranCount加1。而每一次CommitTransaction都会使@@TranCount减1,而RollBackTransaction会回滚所有的嵌套事务包括已经提交的事务和未提交的事务,而使@@TranCount置0。例如:BeginTransaction--@@TranCount=1BeginTransaction--@@TranCount=2BeginTransaction--@@TranCou

6、nt=3CommitTransaction--@@TranCount=2CommitTransaction--@@TranCount=1CommitTransaction--@@TranCount=0如果出现错误ROLLBACKTRANSACTION则:BeginTransaction--@@TranCount=1BeginTransaction--@@TranCount=2BeginTransaction--@@TranCount=3ROLLBACKTRANSACTION--@@TranCount=0CommitTransaction--@@T

7、ranCount=0---出现错误TransactioncountafterEXECUTEindicatesthataCOMMITorROLLBACKTRANSACTIONstatementismissing.Previouscount=1,currentcount=0.如果被嵌套的事务中发生错误,最简单的方法应该是无论如何都先将它提交,同时返回错误码(一个正常情况不可能出现的代码如-1)让上一层事务来处理这个错误,从而使@@TranCount减1。这样外层事务在回滚或者提交的时候能够保证外层事务在开始的时候和结束的时候保持一致。由于里层事务返回

8、了错误码,因此外层事务(最外层)可以回滚事务,这样里面已经提交的事务也可以被回滚而不会出现错误。在项目中应该会常常出现这样的情况,一个存

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。