# SqlServer 游标循环处理数据

在开发中,经常会遇到一个场景。需要批量处理数据,循环添加、删除、修改一些数据。

需求:

有 文章表(dbo.Gas_Article)、文章作者表(dbo.Gas_ArticleAuthor)

现在需要在后台统计出每个作者共发布了多少文章,和所有文章阅读量之和的数据

以下是我的处理方案:

编写PROCEDURE,内部利用游标循环处理数据,然后使用SqlServer代理,新建一个作业定时任务处理,这样就可以在后台实时统计了。

CREATE PROCEDURE Job_UpdateAuthor --创建PROCEDURE
AS
    BEGIN
        DECLARE UpdateAuthorCursor CURSOR --定义游标
        FOR
            SELECT  COUNT(*) AS ArticleNumber ,
                    SUM(ShowHits) AS ArticleHits ,
                    Author
            FROM    dbo.Gas_Article
            WHERE   Author IN ( SELECT  Name
                                FROM    dbo.Gas_ArticleAuthor
                                WHERE   IsDelete = 0 )
            GROUP BY Author --查出需要的数据至游标中

        OPEN UpdateAuthorCursor --打开游标

        DECLARE @Number INT, @Hits INT, @Author NVARCHAR(255)
        FETCH NEXT FROM UpdateAuthorCursor INTO @Number, @Hits, @Author --读取第一行数据,赋值给变量

        WHILE @@FETCH_STATUS = 0
            BEGIN
                UPDATE  dbo.Gas_ArticleAuthor
                SET     ArticleNumber = @Number ,
                        ArticleHits = @Hits
                WHERE   Name = @Author -- 更新dbo.Gas_ArticleAuthor数据

                FETCH NEXT FROM UpdateAuthorCursor INTO @Number, @Hits, @Author --读取下一行数据
            END

        CLOSE UpdateAuthorCursor --关闭游标

        DEALLOCATE UpdateAuthorCursor --释放游标
    END
GO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34