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’) 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) 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) COMMIT TRAN |
- 我会说你是不正确的。
我也有同样的问题。这就是我为解决它所做的。
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 end |
- 它不是发生在我身上的一个例子。所以我分享了答案,任何会如何看待这个。谢谢
来源:https://www.codenong.com/5623840/