2011-11-18 38 views
2

當我在SQL Server中編寫遊標時,大部分時間都保存在try/catch塊中。在catch塊中,我釋放並關閉遊標的活動。在嘗試catch塊中保持遊標是否是一種好的做法?

您的意見是?這是一個很好的做法嗎?

+2

除非不提供基於集合的解決方案,否則使用遊標不是好習慣。否則,如果您擔心會失敗,您可以在catch中執行釋放和關閉活動。 – Asken

+2

爲什麼要在'CATCH'中取消分配和關閉?如果你的'TRY'沒有發生錯誤怎麼辦?什麼時候你的光標被釋放並關閉? – CyberDude

+0

@Cyber​​Dude我的意思是我這樣做兩次,一次在catch塊和其他與一般的執行 – Maddy

回答

1

認爲它通過,我想你會同意的try/catch的光標是不好的做法。

如果聲明或打開遊標然後在catch塊的關閉將無法正常工作時遇到一個錯誤,它需要一個成功打開的遊標。所以你不應該在使用中包含這些部分。

稍稍移動到循環和FETCH。我看不到在簡單的循環語句中發生的錯誤,並且如果它發生在FETCH中,則@@ FETCH_STATUS將被設置爲-1而不是引發錯誤。所以包含這些部分是沒有意義的。

現在我們到你用遊標完成操作。如果在這裏發生錯誤,您要麼修復它並繼續,記錄它並繼續進入下一行,要麼在操作的錯誤處理中明確地斷開循環。你的解決方案會讓你跳出一個catch塊可能做得很好的操作。

後完成循環,要麼是因爲一破,提取錯誤或記錄也可以直接關閉和釋放沒有一個catch塊結束時,就沒有必要重複自己。

所以你寫的代碼沒用,移動從錯誤和可能的解決方案的原因離開,並與一個有關關閉正在呼籲未開封的光標在最壞情況下更換,否則報告錯誤。

相關問題