2015-05-28 49 views
1

我在TRY塊內有一個「Insert into #tmp Select * from TransTable」語句。此語句會生成錯誤,因爲#tmp具有標識列。但出錯後,控制不會進入CATCH塊。提出的錯誤嚴重性爲16,因此根據我的理解,它應該轉到CATCH塊。請解釋爲什麼會發生這種情況。插入到#tmp select * from transTable錯誤不會進入catch塊

讓我詳細說明這個問題,下面是我們要將記錄從一個錶轉儲到另一個表的場景,但由於身份(未打開),它會在執行時拋出錯誤。這裏的期望是,它應該去抓塊,因爲它沒有任何想法?

創建表表A ( ID INT同一性, 值VARCHAR(1) ) 創建表表B ( ID INT同一性, 值VARCHAR(1) )

插入到表A的值( 'A') 插入到表A的值( 'B') 插入表A的值( 'C') 插入到表A的值( 'd') 插入到表A的值( 'E')

開始嘗試 截斷表表B 從表A 端插入表B中選擇*嘗試 開始捕捉 SELECT ERROR_NUMBER()AS ErrorNumber, ERROR_SEVERITY()AS ErrorSeverity, ERROR_STATE()作爲ErrorState, ERROR_PROCEDURE()作爲ErrorProcedure, ERROR_LINE()as ErrorLine, ERROR_MESSAGE()as ErrorMessage;
端部鉤掛

錯誤: 消息8101,級別16,狀態1,行26 表「表B」,當使用列列表和IDENTITY_INSERT爲ON只能指定的標識列的顯式值。

回答

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