В SQL Server, как я знаю, какой режим транзакции я в настоящее время использую? Такой как автоматическая фиксация, явная, или неявная. И как я могу изменить один режим на другое использование tsql? Большое спасибо.
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:
select @@OPTIONS & 2
если это возвращает 2, вы находитесь в режиме неявной транзакции. Если возвращается 0, вы находитесь в режиме автокоммита.
Чтобы переключить режим, в котором вы находитесь, вы должны использовать
set implicit_transactions on
или
set implicit_transactions off
Небольшое изменение ранее опубликованного сценария - соединение находится в режиме автоматической фиксации, если нет активной транзакции И неявные транзакции отключены:
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))