日期:2014-05-17 浏览次数:20511 次
--创建测试表
create table t(i int identity(1,1),val char(1),dt datetime)
--创建测试视图,为了错误重现,视图是错误的
create view v_test_v
as
select * from t where i=(select 1 union select 2)
go
--测试存储过程
alter proc UP_Test_1
as
begin tran
declare @err int
set @err=0
insert into t
values( '0',getdate())
set @err=@err+@@error
---1.取消注释,此处出现视图查询错误,运行proc时出现错误,事务挂起
/* select * from v_test_v
set @err=@err+@@error */
--2.取消注释,运行时,此行错误,"从字符串向 datetime 转换时失败。",事务自动rollback
/*insert into t
values( '0','210')
set @err=@err+@@error
*/
select * from t
set @err=@err+@@error
--3.错误提示:"将截断字符串或二进制数据。语句已终止。
--EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。上一计数 = 2,当前计数 = 3。",事务不会自动rollback
insert t
select '00',getdate()
set @err=@err+@@error
/*
if @err <>0
begin
print 'rollback'
rollback tran
end
else
begin
print 'commit'
commit tran
end
*/
go