SQL Server НАЧИНАЕТ/ЗАКАНЧИВАЕТ по сравнению с, НАЧИНАЮТ СДЕЛКУ/ФИКСАЦИЮ/ОТКАТ

Я пытался найти информацию о сети о различиях между этими операторами, и это кажется мне, они идентичны, но я не могу найти подтверждение этого или любой вид сравнения между двумя.

Что является различием между выполнением этого:

BEGIN
    -- Some update, insert, set statements
END

и выполнение этого

BEGIN TRANS
    -- Some update, insert, set statements
COMMIT TRANS

?

Обратите внимание, что существует только потребность откатывать в случае некоторого исключения или тайм-аута или другого общего отказа, не было бы условной причины откатывать.

22
задан marc_s 28 April 2010 в 14:33
поделиться

3 ответа

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
29
ответ дан 29 November 2019 в 04:54
поделиться

Эти 2 утверждения совершенно разные.

BEGIN..END помечает блок кода, например, в операторе if

IF @something = 1
BEGIN
  -- Do something when @something is equal to 1
END

BEGIN TRANS..COMMIT TRANS заключительный блок включается в транзакцию, и в зависимости от настроек сервера транзакция откатывается. при возникновении ошибки.

2
ответ дан 29 November 2019 в 04:54
поделиться

Обычные BEGIN и END не используются для транзакций. Вместо этого они просто указывают на то, что какой-то блок кода представляет собой единое целое, как в фигурных скобках {} в C # / C ++ / Java.

Если у вас есть оператор IF или цикл WHILE, который выполняет 10 действий, вам необходимо заключить их в BEGIN / END, чтобы SQL Server знал, что весь этот список из 10 операторов должен выполняться как часть этого условия.

5
ответ дан 29 November 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: