此示例脚本应该创建两个表并在每个表中插入一行。
如果一切顺利,我们应该看到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
答案 0 :(得分:3)
问题是您的错误具有高严重性,并且是一种立即断开连接的类型。 TRY-CATCH可以处理更多错误,但它不会捕获所有错误。
Look for - What Errors Are Not Trapped by a TRY/CATCH Block:
看起来在创建表之后,将解析(重新编译)以下插入,触发statement level recompilations
并打破批处理。