22,233
社区成员
发帖
与我相关
我的任务
分享
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
帮你指出问题
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
菜菜快过冬!欧也