当前位置: 首页 > 知识库问答 >
问题:

insert into # tmp select * from transTable错误未进入catch块

徐鸿达
2023-03-14

我在TRY块中有一个“Insert into#tmp Select*from TransTable”语句。此语句生成错误,因为#tmp具有标识列。但在引发错误后,控制不会转到CATCH块。所引发的错误的严重性为16,因此根据我的理解,应该转到CATCH块。请解释为什么会发生这种情况。

让我详细说明这个问题,下面是我们要将记录从一个表转储到另一个表的场景,但由于身份(未打开),它在执行时抛出错误。这里的期望是,它应该去捕获块,因为它没有任何想法?

创建表 TableA ( ID int identity, Value varchar(1) ) 创建 tableB ( ID int identity, Value varchar(1) )

插入到表A值('A')插入到表B值('B')插入表A值(“C”)插入到表D值('D'),插入到表E值('E')中

开始尝试截断表TableB插入TableB从TableA选择*结束尝试开始捕获SELECTERROR_NUMBER()AS ErrorNumber,ERROR_SEVERITY()AS ErrorSeverity,ERROR_STATE()as ErrorState,ERROR_PROCEDURE()as ErrorProcess,ERROR_LINE()as ErrorLine,ERROR_MESSAGE()as ErrorMessage;
结束捕获

错误:消息 8101,级别 16,状态 1,第 26 行 仅当使用列列表且IDENTITY_INSERT为 ON 时,才能指定表“TableB”中标识列的显式值。

共有1个答案

秦雅逸
2023-03-14

如果我没有弄错的话,当您使用SQL调用时,您需要“捕捉”SQL异常,这不同于常规异常。

您使用的是哪种编程语言?您使用的是哪个数据库?你能发布一个示例代码吗?

这是一个例子:

Try
    ' Execute insert statement
Catch sqlEx as SqlException
    ' Do something about the SQL exception
Catch ex as Exception
    '  Regular exception
End Try
 类似资料:
  • 当我发送一个json对象时,我想捕获来自body Parser()中间件的错误,它是无效的,因为我想发送一个自定义响应,而不是一个通用的400错误。 这就是我所拥有的,它起作用了: 但在我看来,这是一种非常丑陋的方法,因为我正在比较可能在未来的express版本中更改的错误消息。有没有其他方法可以捕获bodyParser()错误? 编辑: 这是请求正文包含无效json时的错误: 漂亮的打印堆栈:

  • Catch 从onError通知中恢复发射数据 Catch操作符拦截原始Observable的onError通知,将它替换为其它的数据项或数据序列,让产生的Observable能够正常终止或者根本不终止。 在某些ReactiveX的实现中,有一个叫onErrorResumeNext的操作符,它的行为与Catch相似。 RxJava将Catch实现为三个不同的操作符: onErrorReturn 让

  • 不管你多么精通编程,有时我们的脚本总还是会出现错误。可能是因为我们的编写出错,或是与预期不同的用户输入,或是错误的服务端响应以及其他数千种原因。 通常,如果发生错误,脚本就会“死亡”(立即停止),并在控制台将错误打印出来。 但是有一种语法结构 try..catch,它使我们可以“捕获(catch)”错误,因此脚本可以执行更合理的操作,而不是死掉。 “try…catch” 语法 try..catch

  • 问题内容: 我正在尝试使用try-catch捕获SQL查询(而不是存储过程)中的错误。 由于某种原因,这无法处理我的错误,但我仍然得到: 消息213,级别16,状态1,第29行列名或提供的值数与表定义不匹配。 有什么帮助吗? 问题答案: 您有一个编译时错误,无法在try-catch中捕获。 BooksOnline: 编译和语句级重新编译错误 如果错误在与TRY-ATCH构造相同的执行级别中发生,则

  • 我应该如何在TypeScript中使用Try/Catch?我不希望它检查给定块中的任何错误,因为我已经检查了它们(错误是预期的,状态由catch控制)。 我将代码包装在Try/Catch中(仅为示例): TypeScript拒绝编译它。有没有办法告诉TypeScript我知道这个错误,并且我可以接受?我不想在每一行上都使用忽略(假设我可以有更长的代码),也不想关闭严格模式。有没有更好的解决方案?

  • 我开始在javascript对象中添加错误处理,这些对象通常使用jQuery。我的问题是,当我从jQuery方法中抛出新错误时-它不会被包装jQuery调用的catch语句捕获-它只是抛出标准错误,但不会作为日志消息登录到控制台。下面是一个例子: 当我用try/catch包装回调函数的内容时,它就可以工作了: 有什么想法可以简化它,为什么会这样?