Блокировки данных, вызванные незавершенными транзакциями


1 принят

Правильно ли я говорю, что в некоторых / большинстве ситуаций такая хранимая процедура оставит транзакции открытыми

Некоторые. Зависит от того, что происходит после. С транзакциями IMPLICIT в SQL Server транзакции не запускаются автоматически, пока вы не запустите запрос, который читает базу данных.

я мог бы просто исправить код, выполнив SET IMPLICIT_TRANSACTIONS OFF

Нет. Это не закончит никаких открытых транзакций.

Обратите внимание, что COMMIT не уменьшает @@ trancount до 0. Он уменьшает его на 1. Таким образом, если у вас несколько операторов BEGIN TRAN или явный BEGIN TRAN после того, как транзакция неявно началась, вам понадобится несколько COMMIT.

Вы можете попробовать

WHILE @@trancount > 0 COMMIT TRANSACTION

которые обязательно совершают любые непогашенные транзакции.

SQL-сервер,

sql-server,

0

Ответов: 1


1 принят

Правильно ли я говорю, что в некоторых / большинстве ситуаций такая хранимая процедура оставит транзакции открытыми

Некоторые. Зависит от того, что происходит после. С транзакциями IMPLICIT в SQL Server транзакции не запускаются автоматически, пока вы не запустите запрос, который читает базу данных.

я мог бы просто исправить код, выполнив SET IMPLICIT_TRANSACTIONS OFF

Нет. Это не закончит никаких открытых транзакций.

Обратите внимание, что COMMIT не уменьшает @@ trancount до 0. Он уменьшает его на 1. Таким образом, если у вас несколько операторов BEGIN TRAN или явный BEGIN TRAN после того, как транзакция неявно началась, вам понадобится несколько COMMIT.

Вы можете попробовать

WHILE @@trancount > 0 COMMIT TRANSACTION

которые обязательно совершают любые непогашенные транзакции.

SQL-сервер,
Похожие вопросы