SQL遊標循環執行(又遇到了,記錄一下吧)

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

要SQL中寫相似for循環,我這裏使用的是SQL中的遊標來實現,固然SQL中也有for loop、while do等,我這裏僅以使用遊標方式來進行示例,其它的方式你們有興趣能夠研究一下,成功的同窗能夠在下面回覆一下並把代碼貼出來,與你們分享!oop

閒話少說,上示例:spa

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

複製代碼

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表中的數據(更新每一個用戶所購買服務的時間)get

複製代碼

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中使用循環的全部需求,若是不能知足,本身能夠根據以上兩個示例進行擴展,但願能幫各位解決一些相似的問題。for循環

相關文章
相關標籤/搜索