首页 > 解决方案 > SQL Server 异常处理

问题描述

我试图了解TRY-CATCH的确切含义是什么, 它不会捕获发生在同一范围内的编译错误

我目前正在尝试在 SQL Server 中设置异常处理,并且多次遇到此语句,但不太明白它的含义。我注意到,如果我有一个INSERT语句,则异常处理适用于PRIMARY KEY 约束错误,但它似乎不适用于包含额外列的INSERT语句。

标签: sql-serverexception

解决方案


它似乎不适用于包含额外列的 INSERT 语句。

对,因为 TRY-CATCH 不会捕获发生在同一范围内的编译错误。

如果您的编译错误发生在嵌套范围内,您的 catch 块将运行。

这是行为的一个简单示例:

create table t(id int)
go
begin try
   insert into t(id) values (1,2)
end try
begin catch

  select concat('catch block ', error_message())
end catch
go
begin try
   exec ('insert into t(id) values (1,2)');
end try
begin catch

  select concat('catch block ', error_message())
end catch

推荐阅读