В SQL Server, как узнать, какой режим транзакции я использую в настоящее время? - PullRequest
9 голосов
/ 27 мая 2010

В SQL Server как узнать, какой режим транзакций я сейчас использую? Например, автокоммит, явный или неявный . И как я могу изменить один режим в другой, используя tsql? Большое спасибо.

Ответы [ 3 ]

9 голосов
/ 27 мая 2010
IF @@TRANCOUNT = 0 PRINT 'No current transaction, autocommit mode (default)'
ELSE IF @@OPTIONS & 2 = 0 PRINT 'Implicit transactions is off, explicit transaction is currently running'
ELSE PRINT 'Implicit transactions is on, implicit or explicit transaction is currently running'

Я не думаю, что есть способ определить, была ли текущая транзакция запущена явно или неявно. Итак, этот код просто пытается угадать: если IMPLICIT_TRANSACTIONS выключен, предполагается, что транзакция запущена явно.

MSDN ссылки:

5 голосов
/ 27 мая 2010
select @@OPTIONS & 2

если это возвращает 2, вы находитесь в режиме неявной транзакции. Если он возвращает 0, вы находитесь в режиме автоматической фиксации.

BOL для @@ ОПЦИИ

BOL для каждого параметра

Чтобы переключить режим, в котором вы находитесь, вы должны использовать

set implicit_transactions on

или

set implicit_transactions off
4 голосов
/ 27 августа 2010

Небольшое изменение ранее размещенного скрипта - соединение находится в режиме автоматической фиксации, если нет активной транзакции И неявные транзакции отключены:

IF @@TRANCOUNT = 0 AND (@@OPTIONS & 2 = 0)
  PRINT 'No current transaction, autocommit mode (default)'
ELSE IF @@TRANCOUNT = 0 AND (@@OPTIONS & 2 = 2)
  PRINT 'Implicit transactions is on, no transaction started yet'
ELSE IF @@OPTIONS & 2 = 0 
  PRINT 'Implicit transactions is off, explicit transaction is currently running'
ELSE 
  PRINT 'Implicit transactions is on, implicit or explicit transaction is currently running' + CAST(@@OPTIONS & 2 AS VARCHAR(5))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...