我一直试图在网络上找到关于这些语句之间的差异的信息,在我看来,它们是一样的,但是我找不到这两者之间的任何比较的确认.
这样做有什么区别?
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