事务回滚了,为什么返回受影响的行数还是大于0

lichxi1002 2009-07-14 12:49:51
BEGIN TRANSACTION --事物开始
BEGIN TRY
INSERT INTO A1 ... --这是一条成功的
IF(@@ROWCOUNT > 0)
UPDATE SET A2 ... --这里是一条错误的
COMMIT TRANSACTION--事务提交语句
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION--事务回滚语句
END CATCH
我执行时,事务确实会回滚。A1里也确实没有新的语句,但我在程序中还是会收到,受影响的行数为1,
按我的理解,事务回滚了,"INSERT INTO A1"这条操作也撤消了,受影响的行数应该是为0啊,怎么还是为1呢???
...全文
187 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xsm545 2009-07-16
  • 打赏
  • 举报
回复
顶...又学习新东西了,平时没怎么注意..
feixianxxx 2009-07-14
  • 打赏
  • 举报
回复
因为成功过 他要显示的吧。。那是在错误之前
错误发生后 就回滚 把对的 只要在一个事物里的都回滚 所以等于没发生
但是它发生过
我是这么理解的
rucypli 2009-07-14
  • 打赏
  • 举报
回复
应该是执行完一条语句就打出来的
yingzhilian2008 2009-07-14
  • 打赏
  • 举报
回复
INSERT INTO A1执行到这里的时候就会写Log的啊,后来回滚是后来的事情
lichxi1002 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fcuandy 的回复:]
引用 6 楼 lichxi1002 的回复:
因为我习惯用来“返回受影响的行数”这种方式来判断存储过程的操作是否成功。
现在变成了,当事务回滚时,也会传回一个>0的数值,误导我


那你的理解或做法不正确。


@@rowcount是返回的最后一次执行影响的行数,
以你的例子来说,insert语句是成功的,
但update失败或未影响任何行时,@@rowcount为0
这个是没有问题的,
你总不能把第一次的@@rowcount(由insert影响)拿来放到变量去做第二次执行(update)的判断。

[/Quote]
BEGIN TRANSACTION --事物开始
BEGIN TRY
INSERT INTO A1 ... --这是一条成功的
IF(@@ROWCOUNT > 0)
UPDATE SET A2 ... --这里是一条执行时会报错的代码
COMMIT TRANSACTION--事务提交语句
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION--事务回滚语句
END CATCH
这个代码我测试过的,

我在程序中用”ExecuteNonQuery"方法来执行这个存储过程,确实是返回1,
fcuandy 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lichxi1002 的回复:]
因为我习惯用来“返回受影响的行数”这种方式来判断存储过程的操作是否成功。
现在变成了,当事务回滚时,也会传回一个>0的数值,误导我
[/Quote]

那你的理解或做法不正确。


@@rowcount是返回的最后一次执行影响的行数,
以你的例子来说,insert语句是成功的,
但update失败或未影响任何行时,@@rowcount为0
这个是没有问题的,
你总不能把第一次的@@rowcount(由insert影响)拿来放到变量去做第二次执行(update)的判断。
feixianxxx 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lichxi1002 的回复:]
因为我习惯用来“返回受影响的行数”这种方式来判断存储过程的操作是否成功。
现在变成了,当事务回滚时,也会传回一个>0的数值,误导我
[/Quote]
现在明白就好了 慢慢习惯
lichxi1002 2009-07-14
  • 打赏
  • 举报
回复
因为我习惯用来“返回受影响的行数”这种方式来判断存储过程的操作是否成功。
现在变成了,当事务回滚时,也会传回一个>0的数值,误导我
sdhdy 2009-07-14
  • 打赏
  • 举报
回复
实际上是已经插入记录的,所以受影响的行数为1,不过它会把操作记录进日志文件。
下面那条报错了,按照日志文件回滚成功的那条记录。
  • 打赏
  • 举报
回复
事务回滚之前,确实影响了行,所以要显示。

后边出错后,事务将前面执行的语句进行了回滚,所以你看到的结果是没有变化的情况。
wsh236 2009-07-14
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_4cce4f6a0100bnnu.html
去看看这个吧!具体的我也不太清楚了!

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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