我要回滚在CATCH
块中的所有语句时在TRY
块中遇到的错误:为什么同样的try catch块有两种不同的结果
BEGIN TRY
begin transaction
create table t3(a int)
insert into t3 values(1)
insert into t3 values(1,2) --error occur
insert into t3 values(3)
END TRY
BEGIN CATCH
--just take care of rollback
IF @@TRANCOUNT <> 0
BEGIN
PRINT 'in catch,ROLLING BACK';
ROLLBACK
END
END CATCH
go
起初错误是因为在PRINT抓CATCH
块的作品。但是,经过多次更改后,由于没有更多的打印发生,错误似乎不再被捕获。
因此,我打开一个新的查询,并执行相同的事情。这次错误可以再次抓到!
很抱歉的大图像
不要发布代码的图像,只需将代码粘贴为文本! – Blorgbeard
编译错误通常不可捕捉(除非它们发生在延期编译期间或在子范围内) –
我认为这是一个延迟编译。正如它所显示的那样,第二个错误就是BEGIN CATCH。但在第一个中,似乎错误是由SQL SERVER捕获的。 – FebWind