嵌套 Try/Catches - 仅外部捕获很重要 (MS SQL)
Nested Try/Catches - Does Only Outer Catch Matter (MS SQL)
我认为支持嵌套 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;
答案在@GarethD 的评论中。在这里添加作为答案,以便下一个受害者可以找到它。我在搜索时没有遇到这个问题。
SQL: Try/Catch doesn't catch an error when attempting to access a table that it can't find
GarethD,如果你post回答了,我会把它标记为答案。
我认为支持嵌套 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;
答案在@GarethD 的评论中。在这里添加作为答案,以便下一个受害者可以找到它。我在搜索时没有遇到这个问题。
SQL: Try/Catch doesn't catch an error when attempting to access a table that it can't find
GarethD,如果你post回答了,我会把它标记为答案。