插入#tmp select * from transTable错误不进入catch块

时间:2015-05-28 11:10:15

标签: try-catch

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

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

创建表TableA ( ID int身份, 值varchar(1) ) 创建表TableB ( ID int身份, 值varchar(1) )

插入TableA值('A') 插入TableA值('B') 插入TableA值('C') 插入TableA值('D') 插入TableA值('E')

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

错误: Msg 8101,Level 16,State 1,Line 26 只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'TableB'中标识列的显式值。

1 个答案:

答案 0 :(得分:1)

如果我没有误会,当您使用SQL调用时,您需要“捕获”SQL异常,这与常规异常不同。

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

这是一个例子:

Try
    ' Execute insert statement
Catch sqlEx as SqlException
    ' Do something about the SQL exception
Catch ex as Exception
    '  Regular exception
End Try