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