我在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只能指定的標識列的顯式值。