У запроса COMMIT TRANSACTION нет соответствующей BEGIN TRANSACTION - PullRequest
18 голосов
/ 11 апреля 2011

Вот странная проблема, с которой я сталкиваюсь на рабочем сервере.Это происходило дважды за последние две недели, и это сервер, который получает много трафика.

У нас есть некоторый код в веб-службе, который выполняет BEGIN TRAN, а затем выполняет несколько запросов SQL (две вставки с последующим обновлением).Затем в конце выполняет COMMIT.Дважды теперь мы получаем сообщение в журналах:

Запрос COMMIT TRANSACTION не имеет соответствующей BEGIN TRANSACTION.

Между первыми двумя вставками и обновлением мы вызываемдругой веб-сервис, поэтому возможна небольшая задержка между первыми двумя вставками и последним обновлением до вызова COMMIT.Может ли это быть причиной нашей проблемы?Мы выполняем это на IIS 7 и Server 2008 R2 (все обновленные применены).

Изначально мы думали, что это может быть перезапуск пулов приложений, но изменили это на повторную обработку в середине ночи.Теперь я не уверен, что заставит SQL-сервер забыть вызов BEGIN TRAN.

Этот веб-сервис вызывается довольно часто.Кто-нибудь видел что-то подобное раньше?Я в полной растерянности на данный момент ...

Любая помощь или предложение высоко ценится!

Ответы [ 3 ]

31 голосов
/ 11 апреля 2011

Похоже, что ваша транзакция не удалась, была откатана и нет ничего для фиксации

пример такой вещи

CREATE TABLE BlaTest(id INT PRIMARY KEY NOT NULL)
GO

Теперь запустите

BEGIN TRAN

INSERT BlaTest VALUES('a')
GO

COMMIT TRAN

Вот ошибка

Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value 'a' to data type int.
Msg 3902, Level 16, State 1, Line 2
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.

Это будет работать без проблем

BEGIN TRAN

INSERT BlaTest VALUES(5)
GO

COMMIT TRAN

Хорошая статья о транзакциях: Обработка ошибок в SQL 2005 и более поздних версиях Эрланд Соммарског

0 голосов
/ 21 мая 2019

Моя проблема заключалась в том, что мне нужно было НАЧАТЬ и ЗАКОНЧИТЬСЯ вокруг моего НАЧАЛА ТРАНСА и COMMIT TRAN.

0 голосов
/ 25 июля 2013

У меня была такая же проблема.Вот что я сделал, чтобы решить его.

Запрос COMMIT TRANSACTION не имеет соответствующего BEGIN TRANSACTION

После того, как я проверил запрос SQL и добавил BEGIN TRAN, он будет успешно выполнен,Вот мой пример кода.Это будет работать:

ALTER procedure [dbo].[DeactivateUser]
    @UserId bigint,
    @LoginEmail Nvarchar(100),
    @merchantId int
    as
    Begin
      Begin tran

        update Users set 
        LoginEmail='inactive'+CONVERT(VARCHAR(11), getdate(), 106)+'-'+@LoginEmail,
        IsActive=0 
        where LoginEmail=@LoginEmail and MerchantID=@merchantId                     
        if(@@ERROR=0)
          begin
            commit Tran
            select 0
          end
        else
          begin
            rollback Tran
            select -1
          end


    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...