为什么在SSMS查询窗口中未完成Try / Catch?

时间:2011-03-22 22:11:56

标签: sql transactions try-catch

此示例脚本应该创建两个表并在每个表中插入一行。

如果一切顺利,我们应该看到OK并且有两个数据表。如果没有,我们应该看到FAILED并且根本没有表格。

在查询窗口中运行它会显示第二个插入的错误(应该如此),但不会显示成功或失败的消息。窗口正好等待手动回滚。 ???我在交易或try / catch中缺少什么?

begin try
begin transaction

create table wpt1 (id1 int, junk1 varchar(20))
create table wpt2 (id2 int, junk2 varchar(20))

insert into wpt1 select 1,'blah'
insert into wpt2 select 2,'fred',0  -- <<< deliberate error on this line

commit transaction 
print 'OK'
end try

begin catch
rollback transaction
print 'FAILED'
end catch

1 个答案:

答案 0 :(得分:3)

问题是您的错误具有高严重性,并且是一种立即断开连接的类型。 TRY-CATCH可以处理更多错误,但它不会捕获所有错误。

Look for - What Errors Are Not Trapped by a TRY/CATCH Block:

看起来在创建表之后,将解析(重新编译)以下插入,触发statement level recompilations并打破批处理。