【问题标题】:SQL Server Exception HandlingSQL Server 异常处理
【发布时间】:2019-11-13 22:41:29
【问题描述】:

我试图理解 TRY-CATCH 的确切含义 不捕获同一范围内发生的编译错误

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

【问题讨论】:

  • Try and catch 将捕获所有异常,假设您设置正确。请发布您的一些代码,以便我们了解为什么它没有捕获列错误插入。编译错误可能是指您的捕获顺序不正确
  • 您希望它捕获语法错误吗?

标签: sql-server exception


【解决方案1】:

它似乎不适用于包含额外列的 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

【讨论】:

  • 谢谢,成功了!我并没有真正理解范围的概念,但您的解释会有所帮助。一旦我将 INSERT 语句包含到 exec(....) 块中,TRY-CATCH 就起作用了
猜你喜欢
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多