[SQL Server]事务异常处理不能及时回滚

wangchao1982 2009-03-21 08:35:04
事务异常处理不能及时回滚
问题重现的代码

begin transaction tKaiser
begin try
create table Test
(
[ID] int identity(1,1) primary key,
[Name] nvarchar(50) not null,
[Age] int check ([Age] between 1 and 200),
[Sex] int check ([Sex] in (0, 1))
)
--这里将会产生一个异常
select * from asdf
commit transaction tKaiser
print 'transaction is commit'
end try
begin catch
rollback transaction tKaiser;
end catch

go
--按理说,事务已经被回滚了,下面的查询是会报错的,可事实却不是如此
--如果再执行一下创见表的操作(我理解是,创建表操作,是有默认事务的,
--也就是说再新事务之前才会回滚上一次事务),则test表就会被删除了。我想应该是我对sql2005中的异常处理机制
--的理解有问题,请大人们帮忙解释一下。谢谢
insert into Test([Name], [Age], [Sex])
select 'kaiser', '20', '0'
select * from test
...全文
470 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
luveklu 2011-05-21
  • 打赏
  • 举报
回复
你忘记了添加事务开关

-- Turn on the transaction rollback
set xact_abort on

xact_abort 为 on时,当其中一条T-sql错误,回滚所有事务,否则只回滚错误sql的事务
wangchao1982 2009-03-23
  • 打赏
  • 举报
回复
谢谢各位热心的朋友,更十分感谢wlzd3636。
其实搞asp.net开发的确很让人无语,开始的学习的时候一片迷茫,误以为asp.net+c#+简单的sql就够了。现在又再重新学习html css js 正则。过段时间还得好好看看sql/oracle。
wlzd3636 2009-03-22
  • 打赏
  • 举报
回复
好久不上csdn 功能多很多。。但老不稳定。。。
华而不实 。。
wlzd3636 2009-03-22
  • 打赏
  • 举报
回复

帮你指出问题

1 没有任命事务名字的 除非你设立保存点 save tran tran_name 总共 32 层通过 @@trancount 计数
2 select * from asdf 假设没对应 则 他返回的错误 severity 大于20 try catch 块无法捕捉 级别》=20的 包括硬件错误
但可以通过 嵌套 proc 来捕捉。

3
贴上给的代码

create proc xwj1
as
begin
create table Test
(
[ID] int identity(1,1) primary key,
[Name] nvarchar(50) not null,
[Age] int check ([Age] between 1 and 200),
[Sex] int check ([Sex] in (0, 1))
)
--这里将会产生一个异常
select * from asdf
end

begin transaction
begin try
exec xwj1
commit transaction
print 'transaction is commit'
end try
begin catch
rollback transaction ;
select error_message()
end catch

对象名 'asdf ' 无效。

你再 select * from test 则 test表没被创建

over

菜菜快过冬!欧也



claro 2009-03-22
  • 打赏
  • 举报
回复
帮顶
ai_li7758521 2009-03-21
  • 打赏
  • 举报
回复
帮顶,关注!
-狙击手- 2009-03-21
  • 打赏
  • 举报
回复
严重性为 10 或更低的错误被视为警告或信息性消息,TRY...CATCH 块也不处理此类错误。
-狙击手- 2009-03-21
  • 打赏
  • 举报
回复
TRY...CATCH 块不处理导致数据库引擎 终止连接的严重性为 20 或更高的错误
nzperfect 2009-03-21
  • 打赏
  • 举报
回复
这里将会产生一个异常

是什么异常?
ChinaJiaBing 2009-03-21
  • 打赏
  • 举报
回复
关注...

22,233

社区成员

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

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