The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION
这是我在生产服务器上遇到的一个奇怪问题。过去两周发生了两次,这是一个流量很大的服务器。
我们在 Web 服务中有一些代码执行
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
在前两次插入和更新之间,我们调用了另一个 Web 服务,因此在前两次插入和调用
最初我们虽然可能是应用程序池被回收,但将其更改为在半夜回收。现在我不确定是什么导致 SQL 服务器忘记调用
这个网络服务确实被调用了很多次。有没有人见过这样的东西?我现在完全不知所措...
非常感谢任何帮助或建议!
看起来你的事务失败了,被回滚了,没有什么可以提交
这样的例子
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 及更高版本中的错误处理
我的问题是我的 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 |
我也有同样的问题。这就是我为解决它所做的。
在我检查了
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 |