SQL 中循環、for循環、游標


我們使用SQL語句處理數據時,可能會碰到一些需要循環遍歷某個表並對其進行相應的操作(添加、修改、刪除),這時我們就需要用到咱們在編程中常常用的for或foreach,但是在SQL中寫循環往往顯得那么吃力,翻遍網上的資料,找不到幾個正確的並能執行的循環處理數據的方法,在這里,我來給大家分享一下!

要SQL中寫類似for循環,我這里使用的是SQL中的游標來實現,當然SQL中也有for loop、while do等,我這里僅以使用游標方式來進行示例,其它的方式大家有興趣可以研究一下,成功的同學可以在下面回復一下並把代碼貼出來,與大家分享!

閑話少說,上示例:

1. 利用游標循環更新、刪除MemberAccount表中的數據

DECLARE My_Cursor CURSOR --定義游標  
FOR (SELECT * FROM dbo.MemberAccount) --查出需要的集合放到游標中  
OPEN My_Cursor; --打開游標  
FETCH NEXT FROM My_Cursor ; --讀取第一行數據  
WHILE @@FETCH_STATUS = 0  
    BEGIN  
        --UPDATE dbo.MemberAccount SET UserName = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新  
        --DELETE FROM dbo.MemberAccount WHERE CURRENT OF My_Cursor; --刪除  
        FETCH NEXT FROM My_Cursor; --讀取下一行數據  
    END  
CLOSE My_Cursor; --關閉游標  
DEALLOCATE My_Cursor; --釋放游標  
GO  

2. 利用游標循環更新MemberService表中的數據(更新每個用戶所購買服務的時間)

DECLARE @UserId varchar(50)   
DECLARE My_Cursor CURSOR --定義游標  
FOR (SELECT UserId FROM dbo.MemberAccount) --查出需要的集合放到游標中  
OPEN My_Cursor; --打開游標  
FETCH NEXT FROM My_Cursor INTO @UserId; --讀取第一行數據(將MemberAccount表中的UserId放到@UserId變量中)  
WHILE @@FETCH_STATUS = 0  
    BEGIN  
        PRINT @UserId; --打印數據(打印MemberAccount表中的UserId)  
        UPDATE dbo.MemberService SET ServiceTime = DATEADD(Month, 6, getdate()) WHERE UserId = @UserId; --更新數據  
        FETCH NEXT FROM My_Cursor INTO @UserId; --讀取下一行數據(將MemberAccount表中的UserId放到@UserId變量中)  
    END  
CLOSE My_Cursor; --關閉游標  
DEALLOCATE My_Cursor; --釋放游標  
GO  

上面的兩個例子應該可以解決我們在SQL中使用循環的所有需求,如果不能滿足,自己可以根據以上兩個示例進行擴展,希望能幫各位解決一些類似的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM