游标循环处理数据

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

需求:

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

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

以下是我的处理方案:

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

 1 CREATE PROCEDURE Job_UpdateAuthor --创建PROCEDURE
 2 AS
 3     BEGIN
 4         DECLARE UpdateAuthorCursor CURSOR --定义游标
 5         FOR
 6             SELECT  COUNT(*) AS ArticleNumber ,
 7                     SUM(ShowHits) AS ArticleHits ,
 8                     Author
 9             FROM    dbo.Gas_Article
10             WHERE   Author IN ( SELECT  Name
11                                 FROM    dbo.Gas_ArticleAuthor
12                                 WHERE   IsDelete = 0 )
13             GROUP BY Author --查出需要的数据至游标中
14     
15         OPEN UpdateAuthorCursor --打开游标
16         
17         DECLARE @Number INT, @Hits INT, @Author NVARCHAR(255)
18         FETCH NEXT FROM UpdateAuthorCursor INTO @Number, @Hits, @Author --读取第一行数据,赋值给变量
19                 
20         WHILE @@FETCH_STATUS = 0
21             BEGIN
22                 UPDATE  dbo.Gas_ArticleAuthor
23                 SET     ArticleNumber = @Number ,
24                         ArticleHits = @Hits
25                 WHERE   Name = @Author -- 更新dbo.Gas_ArticleAuthor数据
26                     
27                 FETCH NEXT FROM UpdateAuthorCursor INTO @Number, @Hits, @Author --读取下一行数据
28             END
29             
30         CLOSE UpdateAuthorCursor --关闭游标
31         
32         DEALLOCATE UpdateAuthorCursor --释放游标
33     END
34 GO
原文地址:https://www.cnblogs.com/meowv/p/10135388.html