关于sql server:COMMIT TRANSACTION请求没有对应的BEGIN TRANSACTION | 珊瑚贝

The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION


这是我在生产服务器上遇到的一个奇怪问题。过去两周发生了两次,这是一个流量很大的服务器。

我们在 Web 服务中有一些代码执行 BEGIN TRAN,然后运行一些 SQL 查询(两个插入,然后是一个更新)。然后在最后执行一个 COMMIT。现在我们已经两次在日志中收到消息:

The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.

在前两次插入和更新之间,我们调用了另一个 Web 服务,因此在前两次插入和调用 COMMIT 之前的最后一次更新之间可能会有一点延迟。这会导致我们的问题吗?我们在 IIS 7 和 Server 2008 R2 上运行此程序(已应用所有更新)。

最初我们虽然可能是应用程序池被回收,但将其更改为在半夜回收。现在我不确定是什么导致 SQL 服务器忘记调用 BEGIN TRAN.

这个网络服务确实被调用了很多次。有没有人见过这样的东西?我现在完全不知所措…

非常感谢任何帮助或建议!

  • 还有一个与此相关的错误-support.microsoft.com/kb/810100/en-us


看起来你的事务失败了,被回滚了,没有什么可以提交

这样的例子

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

现在运行这个

1
2
3
4
5
6
BEGIN TRAN

INSERT BlaTest VALUES(‘a’)
GO

COMMIT TRAN

这是错误

1
2
3
4
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.

这将毫无问题地运行

1
2
3
4
5
6
BEGIN TRAN

INSERT BlaTest VALUES(5)
GO

COMMIT TRAN

一篇关于事务的好文章是 Erland Sommarskog 在 SQL 2005 及更高版本中的错误处理

  • 这对我没有任何意义。如果交易失败,错误信息会不会不一样?
  • 1 – @sophtware 对此的简单解决方法是添加 IF @@TRANCOUNT > 0 COMMIT TRAN。这将检查未结交易。你可以在 ROLLBACK 之前做同样的事情。
  • 现在它完全有道理!谢谢!我会检查一下。也许我应该查看日志以获取有关交易的更多信息?


我的问题是我的 BEGIN TRAN 和 COMMIT TRAN 周围需要一个 BEGIN 和 END。

1
2
3
4
5
6
7
8
BEGIN
     BEGIN TRAN

     INSERT BlaTest VALUES(5)
     GO

     COMMIT TRAN
END

  • 我会说你是不正确的。


我也有同样的问题。这就是我为解决它所做的。

COMMIT TRANSACTION请求没有对应的BEGIN TRANSACTION

在我检查了 SQL 查询并添加了一个 BEGIN TRAN 之后,它将成功执行。这是我的示例代码。它将起作用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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


  • 它不是发生在我身上的一个例子。所以我分享了答案,任何会如何看待这个。谢谢


来源:https://www.codenong.com/5623840/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9584.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?