Tsql 在If语句中包装try/catch块

Tsql 在If语句中包装try/catch块,tsql,if-statement,try-catch,Tsql,If Statement,Try Catch,在T-SQL中,以下是正确的: Try和Catch块被视为单独的语句 不成功的If语句导致跳过正在进行的语句 鉴于这些事实,以下代码是否会导致任何异常行为 IF EXISTS ( SELECT someValue FROM someTable WHERE someValue = 1 ) BEGIN TRY -- do something END TRY BEGIN CATCH PRINT @@ERROR END CATCH 如果if语句的计算结果为false,是否会执行

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

Try和Catch块被视为单独的语句 不成功的If语句导致跳过正在进行的语句 鉴于这些事实,以下代码是否会导致任何异常行为

IF EXISTS (
    SELECT someValue FROM someTable WHERE someValue = 1
)
BEGIN TRY
    -- do something
END TRY
BEGIN CATCH
    PRINT @@ERROR
END CATCH
如果if语句的计算结果为false,是否会执行PRINT@@ERROR行? 我的直觉是,如果控件从未到达Try块,Catch块中的代码将不会执行,但是我找不到任何文档来解决这个特定问题

我可以通过将整个Try/Catch块包装在BEGIN语句中跳过整个问题,但为了美观起见,如果可能的话,我希望避免这样做

如果if语句的计算结果为,是否将执行PRINT@@错误行 假的

答案很简单:不。你可以自己试试看。只有当。。块的计算结果为TRUE,则它将为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

如果exeption在begin-end-try内,它将跳转到打印。