在If语句中包装try / catch块

时间:2015-06-10 20:39:46

标签: tsql if-statement try-catch

在T-SQL中,以下情况属实:

  • Try and 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块中的代码将不会被执行,但我找不到任何文档来解决这个特定的问题。

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

1 个答案:

答案 0 :(得分:0)

  

如果IF语句的计算结果为,则PRINT @@ ERROR行是否会执行   假?

简单回答。你可以亲自试试看看。仅当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