#sql_server
Допустим, я запускаю некоторый код в транзакции. Затем, по каким-то соображениям я прерываю запрос нажатием на соответствующую кнопку. Транзакция должна была сама автоматически откатится? Просто, обнаружил лишь спустя какое-то время, что транзакция не откатилась. И обнаружил это только, когда пытался закрыть вкладку с запросом и мне написалось про неподтвержденные транзакции.
Ответы
Ответ 1
Нет, не должна. Транзакция откатывается по явному ROLLBACK TRANSACTION или закрывается по явному COMMIT TRANSACTION. Если ни то ни другое не было вызвано транзакция будет продолжать висеть открытой. Посмотреть висячие транзакции можно командой DBCC OPENTRAN. Как тут верно подметили транзакция откатится при закрытии соединения. Здесь есть правда нюанс связанный с пулингом соединений. Так что закрытие на стороне клиента не всегда означает моментальный откат, т.к. соединение (вместе с незакрытой транзакцией) вернется в пул и будет там неопределённое время висеть.
Комментариев нет:
Отправить комментарий