嵌套尝试/捕获 - 只有外部捕获(MS SQL)

时间:2018-02-13 16:38:50

标签: sql sql-server stored-procedures exception-handling try-catch

我认为支持嵌套的TRY / CATCH。但是,似乎当使用嵌套的try / catch时,最外层的CATCH就是捕获它的那个。

在下面的示例中,打印的是:

尝试1 尝试2 第1章

不应该打印CATCH 2吗?我希望CATCH 2能够运行,而CATCH 1永远不会被命中。

CREATE PROCEDURE TEST__Main AS
BEGIN
  BEGIN TRY 
    PRINT 'TRY 1'
    EXEC TEST__Main_1;
    PRINT 'END 1'
  END TRY
  BEGIN CATCH
    PRINT 'CATCH 1'
  END CATCH 
END
GO

CREATE PROCEDURE TEST__Main_1 AS
BEGIN
  BEGIN TRY 
    PRINT 'TRY 2'
        SELECT * FROM table_doesnt_exist;
    PRINT 'END 2'
  END TRY
  BEGIN CATCH
    PRINT 'CATCH 2'
  END CATCH 
END
GO

EXEC TEST__Main;

1 个答案:

答案 0 :(得分:0)

答案在@ GarethD的评论中。在此添加作为答案,以便下一个受害者可以找到它。搜索时我没有遇到过这个问题。

SQL: Try/Catch doesn't catch an error when attempting to access a table that it can't find

GarethD,如果您发布答案,我会将其标记为答案。