2010-11-01 89 views
0

運行合併語句時需要幫助處理錯誤。 如何使合併的行爲,就好像它有一個圍繞每一行處理的try-catch塊 (如果遇到錯誤,捕獲該錯誤並記錄它(或任何其他處理),然後繼續處理下一行)? Merge語句的默認行爲是什麼?它是否在發生錯誤或回滾處理記錄時回滾整個事務? 輸出子句可以用來檢查錯誤嗎?TSQL合併錯誤處理

回答

3

與所有其他DML語句(INSERT,UPDATE,DELETE)一樣,MERGE是一個全部或全部的命題 - 要麼全部成功,要麼失敗(以及它在內部運行的隱式事務,被打開,被回滾)。你需要事先處理這些事件,或者改變你的MERGE,這樣錯誤就不會發生(例如明確地截斷超長數據)。如果MERGE語句的源代碼是一個複雜的查詢,並且數據清理可能很複雜,那麼您可能需要將結果放入臨時表中以執行此類清理。

+0

由於我的數據在臨時表中,我將在運行合併之前嘗試處理這些問題。在哪裏我可以找到這些類型的錯誤列表,以便我可以預先檢查它? – Debra 2010-11-01 09:02:23

+0

@Debra - 你會遇到的常見類型的錯誤將會針對你所定位的表格 - 正如我所說的那樣,這將是表格上的約束(PK,FK,Check,Unique)或數據鍵入問題(試圖將字母字符放入數字列中,或比列更長的文本允許)。 – 2010-11-01 09:23:15

+1

除了@Damien_The_Unbeliever表示檢查表觸發的事物列表,以查看是否在需要檢查的觸發器中存在某些約束條件。 – HLGEM 2010-11-01 18:22:02