加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 不要对存储过程使用事务

发布时间:2020-12-12 16:57:26 所属栏目:MsSql教程 来源:网络整理
导读:我有一个运行一些命令的存储过程.我不希望这些命令包装在存储过程的事务中.如果第4个命令失败,我希望第1个,第2个和第3个命令保持不回滚. 是否可以以不会将所有存储过程作为一个大事务执行的方式编写存储过程? 解决方法 我认为这里可能存在一些关于批次与交易
我有一个运行一些命令的存储过程.我不希望这些命令包装在存储过程的事务中.如果第4个命令失败,我希望第1个,第2个和第3个命令保持不回滚.

是否可以以不会将所有存储过程作为一个大事务执行的方式编写存储过程?

解决方法

我认为这里可能存在一些关于批次与交易的混淆.

事务是一个或多组语句,它们将作为一个单元成功或失败.所有DDL语句本身都在事务中(即如果更新100行但行98引发错误,则不会更新任何行).您也可以使用BEGIN TRANSACTION在事务中包装一系列语句,然后使用COMMIT或ROLLBACK.

批处理是一系列一起执行的语句.存储过程是批处理的示例.在存储过程中,如果一个语句失败并且存在错误捕获(通常是TRY / CATCH块),则后续语句将不会执行.

我怀疑你的问题是当发生错误时批处理被取消,因为存储的proc本身或外部作用域(如调用此过程的应用程序或存储过程)都有错误捕获.如果是这种情况,则解决这个问题比较棘手,因为您需要调整处理错误的方式,无论陷阱是什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读