0

我们有一堆带有遗留样式错误捕获的旧存储过程。前几天我更改了一个,并包含了一个更新的 TRY...CATCH 块。存储过程刚刚在 TRY/CATCH 之后停止并返回,就好像遗留块中存在错误一样。

如果我放一个

SELECT NULL

在两者之间一切正常。有谁知道为什么会这样?

--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 ------------------
4

1 回答 1

2

在您的 try catch 块中,最后一条语句可能正在执行将行数设置为 0 的操作。“SELECT NULL”将行数设置为 1,因为它返回一行,因此未检测到错误。

You can fix this by changing the logic in the "old" code or by setting your row count variable in the try/catch code. I would recommend that you remove the SELECT NULL, since it would guarantee success and you may not want that behavior.

于 2012-06-04T14:03:04.613 回答