最初代码如下:
此代码有个问题,就是linked server一旦无法连接就报错了,没有重试功能,我们希望第一次出错后,可以有第二次重试机会,如果第二次重试也出错了,那么就算出错
改成如下正确
得出结论:
1、如果IF后面没有ELSE,则IF后面的第一个BEGIN..END语句块受IF的条件影响,第二个BEGIN..END语句块不受IF的条件影响,特殊情况BEGIN TRY…END TRY和BEGIN CATCH…END CATCH是一体的,如果他们两者放入IF后面,不会因为两个BEGIN就会导致BEGIN CATCH…END CATCH不受IF管控
2、这种Try Catch的,直接在Try使用while重试一次不太好,如果try catch在游标里面,这样的话每个游标记录都要在try里面执行两次。还是需要等到Catch的结果来重试比较合适,所有用IF比较合适
改成以下错误
改成以下不完善
案例1:把第二个PRINT 放END CATCH外面,并且不是IF后面第一个BEGIN里面,第二个PRINT被打印出来了
结果:message有如下信息
(1 row(s) affected)
1
1
1
案例2:把第二个PRINT放END CATCH里面,第二个PRINT 没有打印出来了
结果:message有如下信息
(1 row(s) affected)
1
1
案例3:把第二个PRINT 放END CATCH外面,但是放在IF后面第一个BEGIN里面,第二个PRINT 没有打印出来了
结果:message有如下信息
(1 row(s) affected)
1
1
原作者:ITPUB博客 lusklusklusk
|