微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个运行一些命令的存储过程.我不希望这些命令包装在存储过程的事务中.如果第4个命令失败,我希望第1个,第2个和第3个命令保持不回滚.

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

解决方法

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

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

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

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

原文地址:https://www.jb51.cc/mssql/80567.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐