Sqlserver遊標複習

silent發表於2015-05-21

經常寫儲存過程,但今天在遊標使用過程中還是疏忽了一些事情,執行過程中一直執行不下去,後來直接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,導致死迴圈發生,造成不小的損失。
另外很多人忘記關閉遊標,這也會造成下次執行發生錯誤。

資料庫操作需要謹慎謹慎,切記。

相關文章