关于事物计数器,我不能理解的

DeadWolf 2003-09-11 11:05:13
执行存储过程产生错误

服务器: 消息 50000,级别 16,状态 1,过程 P_CancelOrderInfo,行 111
不存在相应的交易信息
服务器: 消息 266,级别 16,状态 2,过程 P_AppendOPToSubDB,行 90
EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 1,当前计数 = 0。
服务器: 消息 3903,级别 16,状态 1,过程 P_Cancel,行 53
ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION。


但是如果我把行 90的ROLLBACK TRANSACTION 注释掉
得到如下错误

服务器: 消息 50000,级别 16,状态 1,过程 P_CancelOrderInfo,行 111
不存在相应的交易信息
服务器: 消息 266,级别 16,状态 2,过程 P_AppendOPToSubDB,行 90
EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 1,当前计数 = 2。

计数器怎么一下从0 变到2了
...全文
31 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
CrazyFor 2003-09-11
  • 打赏
  • 举报
回复
Transact-SQL 参考


@@TRANCOUNT
返回当前连接的活动事务数。

语法
@@TRANCOUNT

返回类型
integer

注释
BEGIN TRANSACTION 语句使 @@TRANCOUNT 递增 1。ROLLBACK TRANSACTION 将 @@TRANCOUNT 递减为 0,但 ROLLBACK TRANSACTION savepoint_name 语句并不影响 @@TRANCOUNT 值。COMMIT TRANSACTION 或 COMMIT WORK 将 @@TRANCOUNT 递减 1。

示例
下面的示例用 @@TRANCOUNT 测试应该提交的打开事务。

BEGIN TRANSACTION
UPDATE authors SET au_lname = upper(au_lname)
WHERE au_lname = 'White'
IF @@ROWCOUNT = 2
COMMIT TRAN

IF @@TRANCOUNT > 0
BEGIN
PRINT 'A transaction needs to be rolled back'
ROLLBACK TRAN
END


请参见

BEGIN TRANSACTION

COMMIT TRANSACTION

ROLLBACK TRANSACTION

系统函数

©1988-2000 Microsoft Corporation。保留所有权利。
DeadWolf 2003-09-11
  • 打赏
  • 举报
回复
多了怕各位看起来麻烦

贴90行这一段吧
-------------------------------------------------------
CLOSE OrderProgramCursor
DEALLOCATE OrderProgramCursor
PRINT '22 @@TRANCOUNT='+CONVERT(VARCHAR,@@TRANCOUNT)
ROLLBACK TRANSACTION
PRINT '23 @@TRANCOUNT='+CONVERT(VARCHAR,@@TRANCOUNT)
RETURN

-------------------------------------------------------
PRINT 是我刚加上的
结果是
22 @@TRANCOUNT=2
23 @@TRANCOUNT=0
也就是说
执行 ROLLBACK TRANSACTION
以后
@@TRANCOUNT直接从2变到0

为什么不是1!!
yujohny 2003-09-11
  • 打赏
  • 举报
回复
你把存储过程代码贴出来
w_rose 2003-09-11
  • 打赏
  • 举报
回复
要注意,不论有多少层事务,一个rollback就将它们全部回滚,并不是只回滚最后的那一个。
w_rose 2003-09-11
  • 打赏
  • 举报
回复
commit太多,或者rollback重复。

如果着急解决问题,可以把所有的rollback前面都加上 if @trancount>0 就不应该出错了。

不过最好还是理清思路,找出设计问题,不要凑合。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧