Sql сервер COMMIT без Tran | Сделка? - PullRequest
6 голосов
/ 13 февраля 2012

Согласно msdn: синтаксис фиксации:

enter image description here

Однако, когда я пропускаю tran / transaction слов - он компилируется и запускается без ошибок. enter image description here

Как это может работать?

Вместо этого он делает что-то еще?

Ответы [ 2 ]

7 голосов
/ 13 февраля 2012

Данный коммит на самом деле не является коммитом, как вы думаете.См. COMMIT WORK

COMMIT [WORK] [;]

Замечания

Этот оператор работает так же, как COMMIT TRANSACTION, за исключением того, что COMMIT TRANSACTION принимает пользовательское имя транзакции.Этот синтаксис COMMIT, с указанием или без указания необязательного ключевого слова WORK, совместим с SQL-92.

Так что COMMIT сам по себе равен COMMIT WORK, что идентично COMMIT TRANSACTION.
То же самое для ROLLBACK [ WORK ]

После комментария

BEGIN TRANSACTION gbn
SELECT 1
COMMIT gbn -- fail
GO
BEGIN TRANSACTION gbn
SELECT 2
COMMIT TRAN gbn -- works
GO
0 голосов
/ 12 января 2015

IF @@TRANCOUNT > 0 нацелен на проверку наличия (как минимум) одной ожидающей транзакции - если его необходимо использовать как с ROLLBACK, так и с COMMIT, так как выполнение этих инструкций без открытия какой-либо транзакции приведет к ошибке

...