經常寫儲存過程,但今天在遊標使用過程中還是疏忽了一些事情,執行過程中一直執行不下去,後來直接sqlserver掛了,教訓啊!
程式碼雖簡單,望銘記:
Create PROCEDURE [dbo].[temphxb] AS BEGIN declare @uid int declare mycursortemp Cursor for select uid from temptable1 where Indate>'2015-05-21' and type='1' group by uid having COUNT(*)>1 open mycursortemp fetch next from mycursortemp into @uid while @@FETCH_STATUS=0 begin delete from temptable1 where id in (select top 1 id from temptable1 where uid=@uid and Indate>'2015-05-21' and fdtype='1') update temptable2 set num=num+1 where uid=@uid fetch next from mycursortemp into @uid end close mycursortemp DEALLOCATE mycursortemp end
遊標使用過程中,一般分為以下五個步驟:
1、宣告遊標
2、開啟遊標
3、使用遊標
4、關閉遊標
5、刪除遊標
今天本人就是在第三步遊標遍歷資料中忘記去執行 fetch next from mycursortemp into @uid,導致死迴圈發生,造成不小的損失。
另外很多人忘記關閉遊標,這也會造成下次執行發生錯誤。
資料庫操作需要謹慎謹慎,切記。