在 If 语句中包装 try/catch 块

Wrapping a try/catch block in an If statement

在 T-SQL 中,以下是正确的:

鉴于这些事实,以下代码会导致任何异常行为吗?

IF EXISTS (
    SELECT someValue FROM someTable WHERE someValue = 1
)
BEGIN TRY
    -- do something
END TRY
BEGIN CATCH
    PRINT @@ERROR
END CATCH

如果 IF 语句的计算结果为假,是否会执行 PRINT @@ERROR 行? 我的直觉是,如果控制从未到达 Try 块,则 Catch 块中的代码将不会执行,但我找不到任何文档来解决这个特定问题。

我可以通过将整个 Try/Catch 块包装在 BEGIN 语句中来跳过整个问题,但我想尽可能避免这种情况(只是为了美观)。

Will the PRINT @@ERROR line execute if the IF statement evaluates to false?

简单回答。你可以自己试试看。只有当 IF .. 块的计算结果为 TRUE 时,它才会这样做。请参阅下面的示例代码

alter procedure testsp
as
begin
declare @var int;

IF EXISTS (
    SELECT Name FROM student WHERE Marks < 90
)
BEGIN TRY
   set @var = 20/0;
END TRY
BEGIN CATCH
    PRINT @@ERROR
END CATCH
end