Я пытался найти информацию о сети о различиях между этими операторами, и это кажется мне, они идентичны, но я не могу найти подтверждение этого или любой вид сравнения между двумя.
Что является различием между выполнением этого:
BEGIN
-- Some update, insert, set statements
END
и выполнение этого
BEGIN TRANS
-- Some update, insert, 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
Эти 2 утверждения совершенно разные.
BEGIN..END
помечает блок кода, например, в операторе if
IF @something = 1
BEGIN
-- Do something when @something is equal to 1
END
BEGIN TRANS..COMMIT TRANS
заключительный блок включается в транзакцию, и в зависимости от настроек сервера транзакция откатывается. при возникновении ошибки.
Обычные BEGIN и END не используются для транзакций. Вместо этого они просто указывают на то, что какой-то блок кода представляет собой единое целое, как в фигурных скобках {} в C # / C ++ / Java.
Если у вас есть оператор IF или цикл WHILE, который выполняет 10 действий, вам необходимо заключить их в BEGIN / END, чтобы SQL Server знал, что весь этот список из 10 операторов должен выполняться как часть этого условия.