--我建议你这样写CREATE proc uuuuuuuuu --基本信息 @参数1 varchar(50), @参数2 varchar(50), .................. --输出参数,用来查看事务是否成功,0表示成功,1表示不成功 @returnFlag int outputas DECLARE @ybtemp intset @returnflag=1--设置此项,出错时自动回滚事务并终止执行 --所以上面的 @returnflag 初始值为1 set xact_abort on begin tran insert into table1 values(......)insert into table2(.....) values (......)update table3 set ddddd=ddddd+1 where ...........update table4 set eee=eee+1 where ................if ......(某参数)=0 BEGIN update table5...........
update table6 ...........
select @ybtemp=Y_shouyi from table3 where ......... if @ybtemp=null update table33 ............. else update table33 ............
如果第一条insert出现错误下面的insert、update会不会执行?
create proc p1
as
print 12/0
if @@error<>0
print '发生错误1'select * from newid()
if @@error<>0
print '发生错误2'
go--测试的存储过程2
create proc p2
as
exec p1if @@error<>0
print '调用 存储过程1 异常结束'
else
print '调用 存储过程1 正常结束'
go--调用
exec p2
go--删除测试
drop proc p1,p2/*--测试结果服务器: 消息 8134,级别 16,状态 1,过程 p1,行 8
遇到被零除错误。
发生错误1
服务器: 消息 208,级别 16,状态 1,过程 p1,行 12
对象名 'newid' 无效。
调用 存储过程1 异常结束
--*/
/*--结论2:被调用的存储过程发生严重错误时,调用它的存储过程可以捕获错误,并可以继续执行下去
--*/
--基本信息
@参数1 varchar(50),
@参数2 varchar(50),
..................
--输出参数,用来查看事务是否成功,0表示成功,1表示不成功
@returnFlag int outputas
DECLARE @ybtemp intset @returnflag=1--设置此项,出错时自动回滚事务并终止执行
--所以上面的 @returnflag 初始值为1
set xact_abort on begin tran
insert into table1 values(......)insert into table2(.....) values (......)update table3 set ddddd=ddddd+1 where ...........update table4 set eee=eee+1 where ................if ......(某参数)=0
BEGIN
update table5...........
update table6 ...........
select @ybtemp=Y_shouyi from table3 where .........
if @ybtemp=null
update table33 .............
else
update table33 ............
ENDCOMMIT TRAN
set @returnflag=0
GO