SQL Server BEGIN / END与BEGIN TRANS / COMMIT / ROLLBACK

前端之家收集整理的这篇文章主要介绍了SQL Server BEGIN / END与BEGIN TRANS / COMMIT / ROLLBACK前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直试图在网络上找到关于这些语句之间的差异的信息,在我看来,它们是一样的,但是我找不到这两者之间的任何比较的确认.

这样做有什么区别?

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

猜你在找的MsSQL相关文章