我认为支持嵌套的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;
答案 0 :(得分:0)
答案在@ GarethD的评论中。在此添加作为答案,以便下一个受害者可以找到它。搜索时我没有遇到过这个问题。
SQL: Try/Catch doesn't catch an error when attempting to access a table that it can't find
GarethD,如果您发布答案,我会将其标记为答案。