存储过程嵌套模板
某个存储过程可能被单独调用,也可能由其他存储过程嵌套调用,则可能会发生嵌套事务的情形。 下面是一种解决存储过程嵌套调用的通用代码,在不能确定存储过程是否可能被其他存储过程调用的情况下,建议每个存储过程都按照这个模板建立 create proc proc_exam
某个存储过程可能被单独调用,也可能由其他存储过程嵌套调用,则可能会发生嵌套事务的情形。
下面是一种解决存储过程嵌套调用的通用代码,在不能确定存储过程是否可能被其他存储过程调用的情况下,建议每个存储过程都按照这个模板建立
create proc proc_example as begin --声明变量,存放当前已开启的事务数 declare @exist_trancount int select @exist_trancount = @@trancount if @exist_trancount > 0 --创建事务保存点 save transaction tran_proc else --开启新事务 begin transaction tran_proc /* 存储过程业务处理代码 ········· */ if @@error<>0 goto error if @exist_trancount = 0 --提交事务 commit tran tran_proc return 1 error: --回滚事务或者事务保存点 rollback transaction tran_proc return -1 end
解释:
1) 首先判断当前存储过程实例执行是否是嵌套事务调用。如果是嵌套,则存储过程判断的@@TRANCOUNT应该大于0,此时创建一个事务保存点,而非开启新事务;如果不是嵌套事务,则@@TRANCOUNT应该为0,此时开启新事务即可
2)然后,是存储过程本身的业务处理代码,每一步处理代码需要判断@@ERROR,如果<>0,执行error代码
3)最后,如果处理正确执行,并且非嵌套调用,则提交事务;如果发生错误,则回滚事务或者回滚保存点。
当然调用存储过程的地方,需要判断存储过程的返回值来做相应的处理
分类:
SQLServer
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2014-05-31 linux安装qwt插件linux
2014-05-31 qt超强绘图控件qwt - 安装及配置
2014-05-31 WIN7 下 Qt Creator 安装 QWT