如下语句: if(len(@strcodename)<1) begin exec SP_Codes GOTO Error_Handle end 当len(@strcodename)<1时,直接跳转了Error_Handle,存储过程SP_Codes根本不执行,如果把GOTO Error_Handle去掉就可以了。
难道GOTO之前的语句不会执行吗?不会吧.... SQL code: if(1<2) begin exec ('select ok=''ok''') GOTO Error_Handle end Error_Handle: print 'error' /* ok ---- ok
(1 行受影响)
error */ 会执行啊
估计是你的存储过程有什么问题 GOTO语句的逻辑不会影响到前面的存储过程的 SQL code: create proc test ( @strcodename int, @msgerror varchar(5) output ) as declare @errid int SET NOCOUNT ON BEGIN TRANSACTION
if(len(@strcodename)<1) begin exec SP_Codes SELECT @msgerror='错误',@errid=99 GOTO Error_Handle end
COMMIT TRANSACTION RETURN(0)
Error_Handle: SET NOCOUNT OFF ROLLBACK TRANSACTION RETURN(@errid)
大致是这样的,看看哪里有问题? SQL code: Error_Handle: SET NOCOUNT OFF ---ROLLBACK TRANSACTION 注%