Ric*_*ich 22 sql sql-server transactions
我一直试图在网上找到关于这些陈述之间的差异的信息,在我看来它们是相同的,但我无法找到这两者的确认或两者之间的任何比较.
这样做有什么区别:
BEGIN
-- Some update, insert, set statements
END
Run Code Online (Sandbox Code Playgroud)
这样做
BEGIN TRANS
-- Some update, insert, set statements
COMMIT TRANS
Run Code Online (Sandbox Code Playgroud)
?
请注意,只有在某些异常或超时或其他常见故障的情况下才需要回滚,因此不会有回滚的条件原因.
Pau*_*ams 29
BEGIN和END处理代码块.它们类似于您在许多语言中看到的花括号:
if (somethingIsTrue)
{ // like BEGIN
// do something here
} // like END
Run Code Online (Sandbox Code Playgroud)
在SQL中,这是:
if somethingIsTrue
BEGIN
-- do something here
END
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
常规的BEGIN和END不用于事务处理。相反,它们仅用于指示某些代码块是单个单元,就像C#/ C ++ / Java中的大括号{}一样。
如果您有执行10项操作的IF语句或WHILE循环,则需要将它们括在BEGIN / END中,以便SQL Server知道应将10条语句的整个列表作为该条件的一部分执行。