レガシー スタイルのエラー トラップを備えた古いストアド プロシージャが多数あります。先日 1 つを変更し、新しい TRY...CATCH ブロックを含めました。ストアド プロシージャは、TRY/CATCH の後に停止し、従来のブロックにエラーがあったかのように返されました。
私が入れたら
SELECT NULL
2 つの間ですべて正常に動作します。なぜこれが起こっているのか知っている人はいますか?
--BEGIN NEW ERROR TRAP--
BEGIN TRY
Do stuff...
END TRY
BEGIN CATCH
END CATCH
--END NEW ERROR TRAP---
----------------- OLD SCHOOL TRAP BEGIN -----------------
SELECT  @spERROR = @@ERROR ,
        @spROWCOUNT = @@ROWCOUNT
SET @spRETURN = @spRETURN + 1
IF ( @spROWCOUNT <= 0
     OR @spERROR <> 0
   ) 
    SET @spRETURN = 0 - @spRETURN
IF ( @spROWCOUNT <= 0
     OR @spERROR <> 0
   ) 
    RETURN @spRETURN
SELECT  @spROWCOUNT = -1 ,
        @spERROR = -1
------------------ OLD SCHOOL ERROR TRAP END ------------------