COMMIT TRANSACTION请求没有相应的BEGIN TRANSACTION

这是我在生产服务器上遇到的一个奇怪的问题。它在过去两周内发生了两次,这是一个获得大量流量的服务器。 我们在Web服务中有一些执行
BEGIN TRAN
的代码,然后运行一些SQL查询(两个插入后跟一个更新)。然后在最后执行一个
COMMIT
。现在我们两次在日志中收到消息:   COMMIT TRANSACTION请求没有相应的BEGIN TRANSACTION。 在前两个插入和更新之间,我们调用另一个Web服务,因此在调用
COMMIT
之前,前两个插入和最后一次更新之间可能会有轻微的延迟。这会导致我们的问题吗?我们在IIS 7和Server 2008 R2上运行此操作(已应用所有更新)。 最初我们虽然它可能是应用程序池被回收,但改为在半夜回收。现在我不确定是什么原因导致SQL服务器忘记调用
BEGIN TRAN
。 这个Web服务确实被调用了很多。以前有人见过这样的东西吗?我现在完全失去了...... 任何帮助或建议都非常赞赏!     
已邀请:
看起来您的事务失败,回滚并且没有任何提交 这样的事情的例子
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
有关事务的好文章是Erland Sommarskog在SQL 2005及更高版本中的错误处理     
我遇到过同样的问题。这就是我解决它的方法。
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
    
我的问题是我在BEGIN TRAN和COMMIT TRAN周围需要一个BEGIN和END。
BEGIN
     BEGIN TRAN

     INSERT BlaTest VALUES(5)
     GO

     COMMIT TRAN
END
    

要回复问题请先登录注册