我一直试图在网络上找到关于这些语句之间的差异的信息,在我看来,它们是一样的,但是我找不到这两者之间的任何比较的确认.
这样做有什么区别?
BEGIN -- Some update,insert,set statements END
并做到这一点
BEGIN TRANS -- Some update,set statements COMMIT TRANS
?
请注意,在某些异常或超时或其他一般故障的情况下,只需要回滚,则不会有条件的回滚原因.
解决方法
BEGIN和END处理代码块.它们与您在许多语言中看到的大括号相似:
if (somethingIsTrue) { // like BEGIN // do something here } // like END
在sql中,这是:
if somethingIsTrue BEGIN -- do something here END
BEGIN TRAN,COMMIT和ROLLBACK开始和结束交易.他们没有指定新的代码块;它们只标记交易边界.
请注意,您可以在单独的代码块中写入BEGIN TRAN和COMMIT.例如,如果您希望代码成为事务的一部分,但如果代码已经在事务中,则不希望启动新的代码,则可以执行以下操作:
declare @TranStarted bit = 0 if @@trancount = 0 begin set @TranStarted = 1 begin tran end -- ... do work ... if @TranStarted = 1 begin commit set @TranStarted = 0 end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。