数据库回滚问题

houyichong 2011-05-16 09:22:46
create proc up_xxx(@ret int output) as
begin
set xact_abort on
begin tran
delete from t_x where ...

if @@error<>0
begin
rollback tran
set @ret=0
end

insert into t_x select ....

if @@error<>0
begin
rollback tran
set @ret=0
end

update t_x set size='c+1' where ...

if @@error<>0
begin
rollback tran
set @ret=0
end

set @ret=1
commit tran
end

如上面的存储过程在执行过程中产生回滚了,请问调用后@ret返回来会=0么?

事务回滚了,sqlserver会返回一个值,
由C#,delphi那边的客户端去捕获,
然后告知使用者操作实际上没成功。
...全文
111 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
houyichong 2011-05-18
  • 打赏
  • 举报
回复
这个问题得解决掉,不然遇到事务繁忙的大型系统就会出有问题的
houyichong 2011-05-17
  • 打赏
  • 举报
回复
我记得sqlserver事务回滚的话好像很会返回一个代码的
misterliwei 2011-05-16
  • 打赏
  • 举报
回复
应该不返回任何值。因为你设置了set xact_abort on,此标志表示如需要任何错误,则回滚事务并终止批的执行。你可以将set xact_abort off就有返回值了。
houyichong 2011-05-16
  • 打赏
  • 举报
回复
你测试一下啊,我以前测试过不行的
GameWong 2011-05-16
  • 打赏
  • 举报
回复
应该是0。
houyichong 2011-05-16
  • 打赏
  • 举报
回复
我以前测试过好像不返回0的,oracel的存储过程中使用exception ...when ...then 是可以返回的,然后我就利用这个返回值判断存储过程是否被成功执行
--小F-- 2011-05-16
  • 打赏
  • 举报
回复
你在事务中写了的 会返回 可以测试一下
kingtiy 2011-05-16
  • 打赏
  • 举报
回复
如上面的存储过程在执行过程中产生回滚了,请问调用后@ret返回来会=0么?

会返回的.
houyichong 2011-05-16
  • 打赏
  • 举报
回复
应该不返回任何值。因为你设置了set xact_abort on,此标志表示如需要任何错误,则回滚事务并终止批的执行。你可以将set xact_abort off就有返回值了。

但是你需要保持事务的一致性!!!!!

现在我需要知道的是:如果事务回滚了,如何通知使用者提交没有成功。

22,209

社区成员

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

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