在T-SQL中,以下情况属实:
鉴于这些事实,以下代码会产生任何异常行为吗?
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块来跳过整个问题,但是我想尽可能避免这种情况(仅仅是为了美学)。
答案 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